refactor: migrate plugins to Claude Code spec format

- Move plugin manifests from .github/plugin/ to .claude-plugin/
- Convert items[] to Claude Code spec fields (agents, commands, skills)
- Rename tags to keywords, drop display/featured/instructions from plugins
- Delete all symlinks and materialized files from plugin directories
- Add eng/materialize-plugins.mjs to copy source files into plugin dirs at publish time
- Add .github/workflows/publish.yml for staged->main publishing
- Update CI triggers to target staged branch
- Update validation, creation, marketplace, and README generation scripts
- Update CONTRIBUTING.md and AGENTS.md documentation
- Include all new content from main (polyglot-test-agent, gem-browser-tester,
  fabric-lakehouse, fluentui-blazor, quasi-coder, transloadit-media-processing,
  make-repo-contribution hardening, website logo/gradient changes)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Aaron Powell
2026-02-18 14:11:22 +11:00
parent 8480453512
commit 9d1df57ebc
243 changed files with 753 additions and 1836 deletions

View File

@@ -2,9 +2,9 @@ name: Check Line Endings
on: on:
push: push:
branches: [main] branches: [staged]
pull_request: pull_request:
branches: [main] branches: [staged]
permissions: permissions:
contents: read contents: read

View File

@@ -2,9 +2,9 @@ name: Check Spelling
on: on:
push: push:
branches: [main] branches: [staged]
pull_request: pull_request:
branches: [main] branches: [staged]
permissions: permissions:
contents: read contents: read

49
.github/workflows/publish.yml vendored Normal file
View File

@@ -0,0 +1,49 @@
name: Publish to main
on:
push:
branches: [staged]
permissions:
contents: write
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout staged branch
uses: actions/checkout@v4
with:
ref: staged
fetch-depth: 0
- name: Extract Node version from package.json
id: node-version
run: |
NODE_VERSION=$(jq -r '.engines.node // "22"' package.json)
echo "version=${NODE_VERSION}" >> "$GITHUB_OUTPUT"
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ steps.node-version.outputs.version }}
- name: Install dependencies
run: npm ci
- name: Materialize plugin files
run: node eng/materialize-plugins.mjs
- name: Build generated files
run: npm run build
- name: Fix line endings
run: bash scripts/fix-line-endings.sh
- name: Publish to main
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add -A
git commit -m "chore: publish from staged [skip ci]" --allow-empty
git push origin HEAD:main --force

View File

@@ -2,6 +2,7 @@ name: Validate README.md
on: on:
pull_request: pull_request:
branches: [staged]
types: [opened, synchronize, reopened] types: [opened, synchronize, reopened]
paths: paths:
- "instructions/**" - "instructions/**"

View File

@@ -9,7 +9,7 @@ The Awesome GitHub Copilot repository is a community-driven collection of custom
- **Instructions** - Coding standards and best practices applied to specific file patterns - **Instructions** - Coding standards and best practices applied to specific file patterns
- **Skills** - Self-contained folders with instructions and bundled resources for specialized tasks - **Skills** - Self-contained folders with instructions and bundled resources for specialized tasks
- **Hooks** - Automated workflows triggered by specific events during development - **Hooks** - Automated workflows triggered by specific events during development
- **Plugins** - Installable packages that group related agents, prompts, and skills around specific themes - **Plugins** - Installable packages that group related agents, commands, and skills around specific themes
## Repository Structure ## Repository Structure
@@ -101,7 +101,7 @@ All agent files (`*.agent.md`), prompt files (`*.prompt.md`), and instruction fi
- plugin.json must have `name` field (matching the folder name) - plugin.json must have `name` field (matching the folder name)
- plugin.json must have `description` field (describing the plugin's purpose) - plugin.json must have `description` field (describing the plugin's purpose)
- plugin.json must have `version` field (semantic version, e.g., "1.0.0") - plugin.json must have `version` field (semantic version, e.g., "1.0.0")
- Plugin folders can contain any combination of agents, prompts, instructions, skills, and hooks - Plugin content is defined declaratively in plugin.json using Claude Code spec fields (`agents`, `commands`, `skills`). Source files live in top-level directories and are materialized into plugins by CI.
- The `marketplace.json` file is automatically generated from all plugins during build - The `marketplace.json` file is automatically generated from all plugins during build
- Plugins are discoverable and installable via GitHub Copilot CLI - Plugins are discoverable and installable via GitHub Copilot CLI
@@ -135,7 +135,7 @@ When adding a new agent, prompt, instruction, skill, hook, or plugin:
**For Plugins:** **For Plugins:**
1. Run `npm run plugin:create -- --name <plugin-name>` to scaffold a new plugin 1. Run `npm run plugin:create -- --name <plugin-name>` to scaffold a new plugin
2. Add agents, prompts, skills, or hooks to the plugin folder 2. Define agents, commands, and skills in `plugin.json` using Claude Code spec fields
3. Edit the generated `plugin.json` with your metadata 3. Edit the generated `plugin.json` with your metadata
4. Run `npm run plugin:validate` to validate the plugin structure 4. Run `npm run plugin:validate` to validate the plugin structure
5. Run `npm run build` to update README.md and marketplace.json 5. Run `npm run build` to update README.md and marketplace.json
@@ -179,6 +179,8 @@ Before committing:
When creating a pull request: When creating a pull request:
> **Important:** All pull requests should target the **`staged`** branch, not `main`.
1. **README updates**: New files should automatically be added to the README when you run `npm run build` 1. **README updates**: New files should automatically be added to the README when you run `npm run build`
2. **Front matter validation**: Ensure all markdown files have the required front matter fields 2. **Front matter validation**: Ensure all markdown files have the required front matter fields
3. **File naming**: Verify all new files follow the lower-case-with-hyphens naming convention 3. **File naming**: Verify all new files follow the lower-case-with-hyphens naming convention
@@ -246,9 +248,8 @@ For plugins (plugins/*/):
- [ ] `plugin.json` has non-empty `description` field - [ ] `plugin.json` has non-empty `description` field
- [ ] `plugin.json` has `version` field (semantic version, e.g., "1.0.0") - [ ] `plugin.json` has `version` field (semantic version, e.g., "1.0.0")
- [ ] Directory name is lower case with hyphens - [ ] Directory name is lower case with hyphens
- [ ] If `tags` is present, it is an array of lowercase hyphenated strings - [ ] If `keywords` is present, it is an array of lowercase hyphenated strings
- [ ] If `items` is present, each item has `path` and `kind` fields - [ ] If `agents`, `commands`, or `skills` arrays are present, each entry is a valid relative path
- [ ] The `kind` field value is one of: `prompt`, `agent`, `instruction`, `skill`, or `hook`
- [ ] The plugin does not reference non-existent files - [ ] The plugin does not reference non-existent files
- [ ] Run `npm run build` to verify marketplace.json is updated correctly - [ ] Run `npm run build` to verify marketplace.json is updated correctly

View File

@@ -2,31 +2,6 @@
Thank you for your interest in contributing to the Awesome GitHub Copilot repository! We welcome contributions from the community to help expand our collection of custom instructions and prompts. Thank you for your interest in contributing to the Awesome GitHub Copilot repository! We welcome contributions from the community to help expand our collection of custom instructions and prompts.
## Prerequisites
### Windows Users: Enable Symlinks
This repository uses symbolic links for plugins. On Windows, you need to enable symlink support before cloning:
1. **Enable Developer Mode** (recommended):
- Open **Settings****Update & Security****For developers**
- Enable **Developer Mode**
- This allows creating symlinks without administrator privileges
2. **Configure Git to use symlinks**:
```bash
git config --global core.symlinks true
```
3. **Clone the repository** (after enabling the above):
```bash
git clone https://github.com/github/awesome-copilot.git
```
> **Note:** If you cloned the repository before enabling symlinks, the symlinks will appear as plain text files containing the target path. You'll need to delete the local repository and re-clone after enabling symlink support.
**Alternative for older Windows versions:** If Developer Mode is not available, you can run Git Bash as Administrator, or grant your user the "Create symbolic links" privilege via Local Security Policy (`secpol.msc` → Local Policies → User Rights Assignment → Create symbolic links).
## How to Contribute ## How to Contribute
### Adding Instructions ### Adding Instructions
@@ -138,11 +113,11 @@ Skills are self-contained folders in the `skills/` directory that include a `SKI
### Adding Plugins ### Adding Plugins
Plugins group related prompts, agents, and skills around specific themes or workflows, making it easy for users to install comprehensive toolkits via GitHub Copilot CLI. Plugins group related agents, commands (prompts), and skills around specific themes or workflows, making it easy for users to install comprehensive toolkits via GitHub Copilot CLI.
1. **Create your plugin**: Run `npm run plugin:create` to scaffold a new plugin 1. **Create your plugin**: Run `npm run plugin:create` to scaffold a new plugin
2. **Follow the naming convention**: Use descriptive, lowercase folder names with hyphens (e.g., `python-web-development`) 2. **Follow the naming convention**: Use descriptive, lowercase folder names with hyphens (e.g., `python-web-development`)
3. **Add your content**: Add agents, commands (prompts), and skills to the plugin folder using symlinks to existing repo files 3. **Define your content**: List agents, commands, and skills in `plugin.json` using the Claude Code spec fields
4. **Test your plugin**: Run `npm run plugin:validate` to verify your plugin structure 4. **Test your plugin**: Run `npm run plugin:validate` to verify your plugin structure
#### Creating a plugin #### Creating a plugin
@@ -155,41 +130,37 @@ npm run plugin:create -- --name my-plugin-id
``` ```
plugins/my-plugin-id/ plugins/my-plugin-id/
├── .github/plugin/plugin.json # Plugin metadata ├── .github/plugin/plugin.json # Plugin metadata (Claude Code spec format)
── README.md # Plugin documentation ── README.md # Plugin documentation
├── commands/ # Symlinked prompt files ```
├── agents/ # Symlinked agent files
└── skills/ # Symlinked skill folders > **Note:** Plugin content is defined declaratively in plugin.json using Claude Code spec fields (`agents`, `commands`, `skills`). Source files live in top-level directories and are materialized into plugins by CI.
#### plugin.json example
```json
{
"name": "my-plugin-id",
"description": "Plugin description",
"version": "1.0.0",
"keywords": [],
"author": { "name": "Awesome Copilot Community" },
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"agents": ["./agents/my-agent.md"],
"commands": ["./commands/my-command.md"],
"skills": ["./skills/my-skill/"]
}
``` ```
#### Plugin Guidelines #### Plugin Guidelines
- **Use symlinks**: Plugin content should be symlinks to source files in agents/, prompts/, skills/ directories - **Declarative content**: Plugin content is specified via `agents`, `commands`, and `skills` arrays in plugin.json — source files live in top-level directories and are materialized into plugins by CI
- **Valid references**: All items referenced in plugin.json must exist in the repository - **Valid references**: All paths referenced in plugin.json must point to existing source files in the repository
- **Instructions excluded**: Instructions are standalone resources and are not part of plugins
- **Clear purpose**: The plugin should solve a specific problem or workflow - **Clear purpose**: The plugin should solve a specific problem or workflow
- **Validate before submitting**: Run `npm run plugin:validate` to ensure your plugin is valid - **Validate before submitting**: Run `npm run plugin:validate` to ensure your plugin is valid
### Working with Plugins
Plugins are installable packages that contain symlinked agents, commands (prompts), and skills organized around a specific theme or workflow.
#### Plugin Structure
```plaintext
plugins/<plugin-name>/
├── .github/plugin/plugin.json # Plugin metadata
├── README.md # Plugin documentation
├── agents/ # Symlinks to agent files (.md)
├── commands/ # Symlinks to prompt files (.md)
└── skills/ # Symlinks to skill folders
```
#### Plugin Guidelines
- **Symlinks, not copies**: Plugin files are symlinks to the source files, avoiding duplication
- **Instructions excluded**: Instructions are not currently supported in plugins
- **Validate before submitting**: Run `npm run plugin:validate` to ensure your plugin is valid
## Submitting Your Contribution ## Submitting Your Contribution
1. **Fork this repository** 1. **Fork this repository**
@@ -198,11 +169,14 @@ plugins/<plugin-name>/
4. **Run the update script**: `npm start` to update the README with your new file (make sure you run `npm install` first if you haven't already) 4. **Run the update script**: `npm start` to update the README with your new file (make sure you run `npm install` first if you haven't already)
- A GitHub Actions workflow will verify that this step was performed correctly - A GitHub Actions workflow will verify that this step was performed correctly
- If the README.md would be modified by running the script, the PR check will fail with a comment showing the required changes - If the README.md would be modified by running the script, the PR check will fail with a comment showing the required changes
5. **Submit a pull request** with: 5. **Submit a pull request** targeting the `staged` branch with:
- A clear title describing your contribution - A clear title describing your contribution
- A brief description of what your instruction/prompt does - A brief description of what your instruction/prompt does
- Any relevant context or usage notes - Any relevant context or usage notes
> [!IMPORTANT]
> All pull requests should target the **`staged`** branch, not `main`.
> [!NOTE] > [!NOTE]
> We use [all-contributors](https://github.com/all-contributors/all-contributors) to recognize all types of contributions to the project. Jump to [Contributors Recognition](#contributor-recognition) to learn more! > We use [all-contributors](https://github.com/all-contributors/all-contributors) to recognize all types of contributions to the project. Jump to [Contributors Recognition](#contributor-recognition) to learn more!

View File

@@ -16,48 +16,48 @@ Curated plugins of related prompts, agents, and skills organized around specific
| Name | Description | Items | Tags | | Name | Description | Items | Tags |
| ---- | ----------- | ----- | ---- | | ---- | ----------- | ----- | ---- |
| [awesome-copilot](../plugins/awesome-copilot/README.md) | Meta prompts that help you discover and generate curated GitHub Copilot agents, instructions, prompts, and skills. | 5 items | github-copilot, discovery, meta, prompt-engineering, agents | | [awesome-copilot](../plugins/awesome-copilot/README.md) | Meta prompts that help you discover and generate curated GitHub Copilot agents, instructions, prompts, and skills. | 5 items | github-copilot, discovery, meta, prompt-engineering, agents |
| [⭐ copilot-sdk](../plugins/copilot-sdk/README.md) | Build applications with the GitHub Copilot SDK across multiple programming languages. Includes comprehensive instructions for C#, Go, Node.js/TypeScript, and Python to help you create AI-powered applications. | 5 items | copilot-sdk, sdk, csharp, go, nodejs, typescript, python, ai, github-copilot | | [azure-cloud-development](../plugins/azure-cloud-development/README.md) | Comprehensive Azure cloud development tools including Infrastructure as Code, serverless functions, architecture patterns, and cost optimization for building scalable cloud applications. | 9 items | azure, cloud, infrastructure, bicep, terraform, serverless, architecture, devops |
| [⭐ partners](../plugins/partners/README.md) | Custom agents that have been created by GitHub partners | 20 items | devops, security, database, cloud, infrastructure, observability, feature-flags, cicd, migration, performance |
| [azure-cloud-development](../plugins/azure-cloud-development/README.md) | Comprehensive Azure cloud development tools including Infrastructure as Code, serverless functions, architecture patterns, and cost optimization for building scalable cloud applications. | 18 items | azure, cloud, infrastructure, bicep, terraform, serverless, architecture, devops |
| [cast-imaging](../plugins/cast-imaging/README.md) | A comprehensive collection of specialized agents for software analysis, impact assessment, structural quality advisories, and architectural review using CAST Imaging. | 3 items | cast-imaging, software-analysis, architecture, quality, impact-analysis, devops | | [cast-imaging](../plugins/cast-imaging/README.md) | A comprehensive collection of specialized agents for software analysis, impact assessment, structural quality advisories, and architectural review using CAST Imaging. | 3 items | cast-imaging, software-analysis, architecture, quality, impact-analysis, devops |
| [clojure-interactive-programming](../plugins/clojure-interactive-programming/README.md) | Tools for REPL-first Clojure workflows featuring Clojure instructions, the interactive programming chat mode and supporting guidance. | 3 items | clojure, repl, interactive-programming | | [clojure-interactive-programming](../plugins/clojure-interactive-programming/README.md) | Tools for REPL-first Clojure workflows featuring Clojure instructions, the interactive programming chat mode and supporting guidance. | 2 items | clojure, repl, interactive-programming |
| [context-engineering](../plugins/context-engineering/README.md) | Tools and techniques for maximizing GitHub Copilot effectiveness through better context management. Includes guidelines for structuring code, an agent for planning multi-file changes, and prompts for context-aware development. | 5 items | context, productivity, refactoring, best-practices, architecture | | [context-engineering](../plugins/context-engineering/README.md) | Tools and techniques for maximizing GitHub Copilot effectiveness through better context management. Includes guidelines for structuring code, an agent for planning multi-file changes, and prompts for context-aware development. | 4 items | context, productivity, refactoring, best-practices, architecture |
| [csharp-dotnet-development](../plugins/csharp-dotnet-development/README.md) | Essential prompts, instructions, and chat modes for C# and .NET development including testing, documentation, and best practices. | 11 items | csharp, dotnet, aspnet, testing | | [copilot-sdk](../plugins/copilot-sdk/README.md) | Build applications with the GitHub Copilot SDK across multiple programming languages. Includes comprehensive instructions for C#, Go, Node.js/TypeScript, and Python to help you create AI-powered applications. | 1 items | copilot-sdk, sdk, csharp, go, nodejs, typescript, python, ai, github-copilot |
| [csharp-mcp-development](../plugins/csharp-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in C# using the official SDK. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 3 items | csharp, mcp, model-context-protocol, dotnet, server-development | | [csharp-dotnet-development](../plugins/csharp-dotnet-development/README.md) | Essential prompts, instructions, and chat modes for C# and .NET development including testing, documentation, and best practices. | 9 items | csharp, dotnet, aspnet, testing |
| [database-data-management](../plugins/database-data-management/README.md) | Database administration, SQL optimization, and data management tools for PostgreSQL, SQL Server, and general database development best practices. | 8 items | database, sql, postgresql, sql-server, dba, optimization, queries, data-management | | [csharp-mcp-development](../plugins/csharp-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in C# using the official SDK. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 2 items | csharp, mcp, model-context-protocol, dotnet, server-development |
| [dataverse-sdk-for-python](../plugins/dataverse-sdk-for-python/README.md) | Comprehensive collection for building production-ready Python integrations with Microsoft Dataverse. Includes official documentation, best practices, advanced features, file operations, and code generation prompts. | 17 items | dataverse, python, integration, sdk | | [database-data-management](../plugins/database-data-management/README.md) | Database administration, SQL optimization, and data management tools for PostgreSQL, SQL Server, and general database development best practices. | 6 items | database, sql, postgresql, sql-server, dba, optimization, queries, data-management |
| [devops-oncall](../plugins/devops-oncall/README.md) | A focused set of prompts, instructions, and a chat mode to help triage incidents and respond quickly with DevOps tools and Azure resources. | 5 items | devops, incident-response, oncall, azure | | [dataverse-sdk-for-python](../plugins/dataverse-sdk-for-python/README.md) | Comprehensive collection for building production-ready Python integrations with Microsoft Dataverse. Includes official documentation, best practices, advanced features, file operations, and code generation prompts. | 4 items | dataverse, python, integration, sdk |
| [edge-ai-tasks](../plugins/edge-ai-tasks/README.md) | Task Researcher and Task Planner for intermediate to expert users and large codebases - Brought to you by microsoft/edge-ai | 3 items | architecture, planning, research, tasks, implementation | | [devops-oncall](../plugins/devops-oncall/README.md) | A focused set of prompts, instructions, and a chat mode to help triage incidents and respond quickly with DevOps tools and Azure resources. | 3 items | devops, incident-response, oncall, azure |
| [frontend-web-dev](../plugins/frontend-web-dev/README.md) | Essential prompts, instructions, and chat modes for modern frontend web development including React, Angular, Vue, TypeScript, and CSS frameworks. | 11 items | frontend, web, react, typescript, javascript, css, html, angular, vue | | [edge-ai-tasks](../plugins/edge-ai-tasks/README.md) | Task Researcher and Task Planner for intermediate to expert users and large codebases - Brought to you by microsoft/edge-ai | 2 items | architecture, planning, research, tasks, implementation |
| [frontend-web-dev](../plugins/frontend-web-dev/README.md) | Essential prompts, instructions, and chat modes for modern frontend web development including React, Angular, Vue, TypeScript, and CSS frameworks. | 4 items | frontend, web, react, typescript, javascript, css, html, angular, vue |
| [gem-team](../plugins/gem-team/README.md) | A modular multi-agent team for complex project execution with DAG-based planning, parallel execution, TDD verification, and automated testing. | 8 items | multi-agent, orchestration, dag-planning, parallel-execution, tdd, verification, automation, security | | [gem-team](../plugins/gem-team/README.md) | A modular multi-agent team for complex project execution with DAG-based planning, parallel execution, TDD verification, and automated testing. | 8 items | multi-agent, orchestration, dag-planning, parallel-execution, tdd, verification, automation, security |
| [go-mcp-development](../plugins/go-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Go using the official github.com/modelcontextprotocol/go-sdk. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 3 items | go, golang, mcp, model-context-protocol, server-development, sdk | | [go-mcp-development](../plugins/go-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Go using the official github.com/modelcontextprotocol/go-sdk. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 2 items | go, golang, mcp, model-context-protocol, server-development, sdk |
| [java-development](../plugins/java-development/README.md) | Comprehensive collection of prompts and instructions for Java development including Spring Boot, Quarkus, testing, documentation, and best practices. | 12 items | java, springboot, quarkus, jpa, junit, javadoc | | [java-development](../plugins/java-development/README.md) | Comprehensive collection of prompts and instructions for Java development including Spring Boot, Quarkus, testing, documentation, and best practices. | 4 items | java, springboot, quarkus, jpa, junit, javadoc |
| [java-mcp-development](../plugins/java-mcp-development/README.md) | Complete toolkit for building Model Context Protocol servers in Java using the official MCP Java SDK with reactive streams and Spring Boot integration. | 3 items | java, mcp, model-context-protocol, server-development, sdk, reactive-streams, spring-boot, reactor | | [java-mcp-development](../plugins/java-mcp-development/README.md) | Complete toolkit for building Model Context Protocol servers in Java using the official MCP Java SDK with reactive streams and Spring Boot integration. | 2 items | java, mcp, model-context-protocol, server-development, sdk, reactive-streams, spring-boot, reactor |
| [kotlin-mcp-development](../plugins/kotlin-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Kotlin using the official io.modelcontextprotocol:kotlin-sdk library. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 3 items | kotlin, mcp, model-context-protocol, kotlin-multiplatform, server-development, ktor | | [kotlin-mcp-development](../plugins/kotlin-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Kotlin using the official io.modelcontextprotocol:kotlin-sdk library. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 2 items | kotlin, mcp, model-context-protocol, kotlin-multiplatform, server-development, ktor |
| [mcp-m365-copilot](../plugins/mcp-m365-copilot/README.md) | Comprehensive collection for building declarative agents with Model Context Protocol integration for Microsoft 365 Copilot | 5 items | mcp, m365-copilot, declarative-agents, api-plugins, model-context-protocol, adaptive-cards | | [mcp-m365-copilot](../plugins/mcp-m365-copilot/README.md) | Comprehensive collection for building declarative agents with Model Context Protocol integration for Microsoft 365 Copilot | 4 items | mcp, m365-copilot, declarative-agents, api-plugins, model-context-protocol, adaptive-cards |
| [openapi-to-application-csharp-dotnet](../plugins/openapi-to-application-csharp-dotnet/README.md) | Generate production-ready .NET applications from OpenAPI specifications. Includes ASP.NET Core project scaffolding, controller generation, entity framework integration, and C# best practices. | 3 items | openapi, code-generation, api, csharp, dotnet, aspnet | | [openapi-to-application-csharp-dotnet](../plugins/openapi-to-application-csharp-dotnet/README.md) | Generate production-ready .NET applications from OpenAPI specifications. Includes ASP.NET Core project scaffolding, controller generation, entity framework integration, and C# best practices. | 2 items | openapi, code-generation, api, csharp, dotnet, aspnet |
| [openapi-to-application-go](../plugins/openapi-to-application-go/README.md) | Generate production-ready Go applications from OpenAPI specifications. Includes project scaffolding, handler generation, middleware setup, and Go best practices for REST APIs. | 3 items | openapi, code-generation, api, go, golang | | [openapi-to-application-go](../plugins/openapi-to-application-go/README.md) | Generate production-ready Go applications from OpenAPI specifications. Includes project scaffolding, handler generation, middleware setup, and Go best practices for REST APIs. | 2 items | openapi, code-generation, api, go, golang |
| [openapi-to-application-java-spring-boot](../plugins/openapi-to-application-java-spring-boot/README.md) | Generate production-ready Spring Boot applications from OpenAPI specifications. Includes project scaffolding, REST controller generation, service layer organization, and Spring Boot best practices. | 3 items | openapi, code-generation, api, java, spring-boot | | [openapi-to-application-java-spring-boot](../plugins/openapi-to-application-java-spring-boot/README.md) | Generate production-ready Spring Boot applications from OpenAPI specifications. Includes project scaffolding, REST controller generation, service layer organization, and Spring Boot best practices. | 2 items | openapi, code-generation, api, java, spring-boot |
| [openapi-to-application-nodejs-nestjs](../plugins/openapi-to-application-nodejs-nestjs/README.md) | Generate production-ready NestJS applications from OpenAPI specifications. Includes project scaffolding, controller and service generation, TypeScript best practices, and enterprise patterns. | 3 items | openapi, code-generation, api, nodejs, typescript, nestjs | | [openapi-to-application-nodejs-nestjs](../plugins/openapi-to-application-nodejs-nestjs/README.md) | Generate production-ready NestJS applications from OpenAPI specifications. Includes project scaffolding, controller and service generation, TypeScript best practices, and enterprise patterns. | 2 items | openapi, code-generation, api, nodejs, typescript, nestjs |
| [openapi-to-application-python-fastapi](../plugins/openapi-to-application-python-fastapi/README.md) | Generate production-ready FastAPI applications from OpenAPI specifications. Includes project scaffolding, route generation, dependency injection, and Python best practices for async APIs. | 3 items | openapi, code-generation, api, python, fastapi | | [openapi-to-application-python-fastapi](../plugins/openapi-to-application-python-fastapi/README.md) | Generate production-ready FastAPI applications from OpenAPI specifications. Includes project scaffolding, route generation, dependency injection, and Python best practices for async APIs. | 2 items | openapi, code-generation, api, python, fastapi |
| [ospo-sponsorship](../plugins/ospo-sponsorship/README.md) | Tools and resources for Open Source Program Offices (OSPOs) to identify, evaluate, and manage sponsorship of open source dependencies through GitHub Sponsors, Open Collective, and other funding platforms. | 0 items | | | [ospo-sponsorship](../plugins/ospo-sponsorship/README.md) | Tools and resources for Open Source Program Offices (OSPOs) to identify, evaluate, and manage sponsorship of open source dependencies through GitHub Sponsors, Open Collective, and other funding platforms. | 1 items | |
| [pcf-development](../plugins/pcf-development/README.md) | Complete toolkit for developing custom code components using Power Apps Component Framework for model-driven and canvas apps | 17 items | power-apps, pcf, component-framework, typescript, power-platform | | [partners](../plugins/partners/README.md) | Custom agents that have been created by GitHub partners | 20 items | devops, security, database, cloud, infrastructure, observability, feature-flags, cicd, migration, performance |
| [php-mcp-development](../plugins/php-mcp-development/README.md) | Comprehensive resources for building Model Context Protocol servers using the official PHP SDK with attribute-based discovery, including best practices, project generation, and expert assistance | 3 items | php, mcp, model-context-protocol, server-development, sdk, attributes, composer | | [pcf-development](../plugins/pcf-development/README.md) | Complete toolkit for developing custom code components using Power Apps Component Framework for model-driven and canvas apps | 0 items | power-apps, pcf, component-framework, typescript, power-platform |
| [polyglot-test-agent](../plugins/polyglot-test-agent/README.md) | Multi-agent pipeline for generating comprehensive unit tests across any programming language. Orchestrates research, planning, and implementation phases using specialized agents to produce tests that compile, pass, and follow project conventions. | 10 items | testing, unit-tests, polyglot, test-generation, multi-agent, tdd, csharp, typescript, python, go | | [php-mcp-development](../plugins/php-mcp-development/README.md) | Comprehensive resources for building Model Context Protocol servers using the official PHP SDK with attribute-based discovery, including best practices, project generation, and expert assistance | 2 items | php, mcp, model-context-protocol, server-development, sdk, attributes, composer |
| [power-apps-code-apps](../plugins/power-apps-code-apps/README.md) | Complete toolkit for Power Apps Code Apps development including project scaffolding, development standards, and expert guidance for building code-first applications with Power Platform integration. | 3 items | power-apps, power-platform, typescript, react, code-apps, dataverse, connectors | | [polyglot-test-agent](../plugins/polyglot-test-agent/README.md) | Multi-agent pipeline for generating comprehensive unit tests across any programming language. Orchestrates research, planning, and implementation phases using specialized agents to produce tests that compile, pass, and follow project conventions. | 9 items | testing, unit-tests, polyglot, test-generation, multi-agent, tdd, csharp, typescript, python, go |
| [power-bi-development](../plugins/power-bi-development/README.md) | Comprehensive Power BI development resources including data modeling, DAX optimization, performance tuning, visualization design, security best practices, and DevOps/ALM guidance for building enterprise-grade Power BI solutions. | 14 items | power-bi, dax, data-modeling, performance, visualization, security, devops, business-intelligence | | [power-apps-code-apps](../plugins/power-apps-code-apps/README.md) | Complete toolkit for Power Apps Code Apps development including project scaffolding, development standards, and expert guidance for building code-first applications with Power Platform integration. | 2 items | power-apps, power-platform, typescript, react, code-apps, dataverse, connectors |
| [power-platform-mcp-connector-development](../plugins/power-platform-mcp-connector-development/README.md) | Complete toolkit for developing Power Platform custom connectors with Model Context Protocol integration for Microsoft Copilot Studio | 4 items | power-platform, mcp, copilot-studio, custom-connector, json-rpc | | [power-bi-development](../plugins/power-bi-development/README.md) | Comprehensive Power BI development resources including data modeling, DAX optimization, performance tuning, visualization design, security best practices, and DevOps/ALM guidance for building enterprise-grade Power BI solutions. | 8 items | power-bi, dax, data-modeling, performance, visualization, security, devops, business-intelligence |
| [project-planning](../plugins/project-planning/README.md) | Tools and guidance for software project planning, feature breakdown, epic management, implementation planning, and task organization for development teams. | 17 items | planning, project-management, epic, feature, implementation, task, architecture, technical-spike | | [power-platform-mcp-connector-development](../plugins/power-platform-mcp-connector-development/README.md) | Complete toolkit for developing Power Platform custom connectors with Model Context Protocol integration for Microsoft Copilot Studio | 3 items | power-platform, mcp, copilot-studio, custom-connector, json-rpc |
| [python-mcp-development](../plugins/python-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Python using the official SDK with FastMCP. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 3 items | python, mcp, model-context-protocol, fastmcp, server-development | | [project-planning](../plugins/project-planning/README.md) | Tools and guidance for software project planning, feature breakdown, epic management, implementation planning, and task organization for development teams. | 15 items | planning, project-management, epic, feature, implementation, task, architecture, technical-spike |
| [ruby-mcp-development](../plugins/ruby-mcp-development/README.md) | Complete toolkit for building Model Context Protocol servers in Ruby using the official MCP Ruby SDK gem with Rails integration support. | 3 items | ruby, mcp, model-context-protocol, server-development, sdk, rails, gem | | [python-mcp-development](../plugins/python-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Python using the official SDK with FastMCP. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 2 items | python, mcp, model-context-protocol, fastmcp, server-development |
| [ruby-mcp-development](../plugins/ruby-mcp-development/README.md) | Complete toolkit for building Model Context Protocol servers in Ruby using the official MCP Ruby SDK gem with Rails integration support. | 2 items | ruby, mcp, model-context-protocol, server-development, sdk, rails, gem |
| [rug-agentic-workflow](../plugins/rug-agentic-workflow/README.md) | Three-agent workflow for orchestrated software delivery with an orchestrator plus implementation and QA subagents. | 3 items | agentic-workflow, orchestration, subagents, software-engineering, qa | | [rug-agentic-workflow](../plugins/rug-agentic-workflow/README.md) | Three-agent workflow for orchestrated software delivery with an orchestrator plus implementation and QA subagents. | 3 items | agentic-workflow, orchestration, subagents, software-engineering, qa |
| [rust-mcp-development](../plugins/rust-mcp-development/README.md) | Build high-performance Model Context Protocol servers in Rust using the official rmcp SDK with async/await, procedural macros, and type-safe implementations. | 3 items | rust, mcp, model-context-protocol, server-development, sdk, tokio, async, macros, rmcp | | [rust-mcp-development](../plugins/rust-mcp-development/README.md) | Build high-performance Model Context Protocol servers in Rust using the official rmcp SDK with async/await, procedural macros, and type-safe implementations. | 2 items | rust, mcp, model-context-protocol, server-development, sdk, tokio, async, macros, rmcp |
| [security-best-practices](../plugins/security-best-practices/README.md) | Security frameworks, accessibility guidelines, performance optimization, and code quality best practices for building secure, maintainable, and high-performance applications. | 6 items | security, accessibility, performance, code-quality, owasp, a11y, optimization, best-practices | | [security-best-practices](../plugins/security-best-practices/README.md) | Security frameworks, accessibility guidelines, performance optimization, and code quality best practices for building secure, maintainable, and high-performance applications. | 1 items | security, accessibility, performance, code-quality, owasp, a11y, optimization, best-practices |
| [software-engineering-team](../plugins/software-engineering-team/README.md) | 7 specialized agents covering the full software development lifecycle from UX design and architecture to security and DevOps. | 7 items | team, enterprise, security, devops, ux, architecture, product, ai-ethics | | [software-engineering-team](../plugins/software-engineering-team/README.md) | 7 specialized agents covering the full software development lifecycle from UX design and architecture to security and DevOps. | 7 items | team, enterprise, security, devops, ux, architecture, product, ai-ethics |
| [structured-autonomy](../plugins/structured-autonomy/README.md) | Premium planning, thrifty implementation | 0 items | | | [structured-autonomy](../plugins/structured-autonomy/README.md) | Premium planning, thrifty implementation | 3 items | |
| [swift-mcp-development](../plugins/swift-mcp-development/README.md) | Comprehensive collection for building Model Context Protocol servers in Swift using the official MCP Swift SDK with modern concurrency features. | 3 items | swift, mcp, model-context-protocol, server-development, sdk, ios, macos, concurrency, actor, async-await | | [swift-mcp-development](../plugins/swift-mcp-development/README.md) | Comprehensive collection for building Model Context Protocol servers in Swift using the official MCP Swift SDK with modern concurrency features. | 2 items | swift, mcp, model-context-protocol, server-development, sdk, ios, macos, concurrency, actor, async-await |
| [technical-spike](../plugins/technical-spike/README.md) | Tools for creation, management and research of technical spikes to reduce unknowns and assumptions before proceeding to specification and implementation of solutions. | 2 items | technical-spike, assumption-testing, validation, research | | [technical-spike](../plugins/technical-spike/README.md) | Tools for creation, management and research of technical spikes to reduce unknowns and assumptions before proceeding to specification and implementation of solutions. | 2 items | technical-spike, assumption-testing, validation, research |
| [testing-automation](../plugins/testing-automation/README.md) | Comprehensive collection for writing tests, test automation, and test-driven development including unit tests, integration tests, and end-to-end testing strategies. | 11 items | testing, tdd, automation, unit-tests, integration, playwright, jest, nunit | | [testing-automation](../plugins/testing-automation/README.md) | Comprehensive collection for writing tests, test automation, and test-driven development including unit tests, integration tests, and end-to-end testing strategies. | 9 items | testing, tdd, automation, unit-tests, integration, playwright, jest, nunit |
| [typescript-mcp-development](../plugins/typescript-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in TypeScript/Node.js using the official SDK. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 3 items | typescript, mcp, model-context-protocol, nodejs, server-development | | [typescript-mcp-development](../plugins/typescript-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in TypeScript/Node.js using the official SDK. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 2 items | typescript, mcp, model-context-protocol, nodejs, server-development |
| [typespec-m365-copilot](../plugins/typespec-m365-copilot/README.md) | Comprehensive collection of prompts, instructions, and resources for building declarative agents and API plugins using TypeSpec for Microsoft 365 Copilot extensibility. | 4 items | typespec, m365-copilot, declarative-agents, api-plugins, agent-development, microsoft-365 | | [typespec-m365-copilot](../plugins/typespec-m365-copilot/README.md) | Comprehensive collection of prompts, instructions, and resources for building declarative agents and API plugins using TypeSpec for Microsoft 365 Copilot extensibility. | 3 items | typespec, m365-copilot, declarative-agents, api-plugins, agent-development, microsoft-365 |

View File

@@ -20,7 +20,7 @@ function prompt(question) {
function parseArgs() { function parseArgs() {
const args = process.argv.slice(2); const args = process.argv.slice(2);
const out = { name: undefined, tags: undefined }; const out = { name: undefined, keywords: undefined };
for (let i = 0; i < args.length; i++) { for (let i = 0; i < args.length; i++) {
const a = args[i]; const a = args[i];
@@ -29,22 +29,22 @@ function parseArgs() {
i++; i++;
} else if (a.startsWith("--name=")) { } else if (a.startsWith("--name=")) {
out.name = a.split("=")[1]; out.name = a.split("=")[1];
} else if (a === "--tags" || a === "-t") { } else if (a === "--keywords" || a === "--tags" || a === "-t") {
out.tags = args[i + 1]; out.keywords = args[i + 1];
i++; i++;
} else if (a.startsWith("--tags=")) { } else if (a.startsWith("--keywords=") || a.startsWith("--tags=")) {
out.tags = a.split("=")[1]; out.keywords = a.split("=")[1];
} else if (!a.startsWith("-") && !out.name) { } else if (!a.startsWith("-") && !out.name) {
// first positional -> name // first positional -> name
out.name = a; out.name = a;
} else if (!a.startsWith("-") && out.name && !out.tags) { } else if (!a.startsWith("-") && out.name && !out.keywords) {
// second positional -> tags // second positional -> keywords
out.tags = a; out.keywords = a;
} }
} }
if (Array.isArray(out.tags)) { if (Array.isArray(out.keywords)) {
out.tags = out.tags.join(","); out.keywords = out.keywords.join(",");
} }
return out; return out;
@@ -108,23 +108,23 @@ async function createPlugin() {
description = defaultDescription; description = defaultDescription;
} }
// Get tags // Get keywords
let tags = []; let keywords = [];
let tagInput = parsed.tags; let keywordInput = parsed.keywords;
if (!tagInput) { if (!keywordInput) {
tagInput = await prompt( keywordInput = await prompt(
"Tags (comma-separated, or press Enter for defaults): " "Keywords (comma-separated, or press Enter for defaults): "
); );
} }
if (tagInput && tagInput.toString().trim()) { if (keywordInput && keywordInput.toString().trim()) {
tags = tagInput keywords = keywordInput
.toString() .toString()
.split(",") .split(",")
.map((tag) => tag.trim()) .map((kw) => kw.trim())
.filter((tag) => tag); .filter((kw) => kw);
} else { } else {
tags = pluginId.split("-").slice(0, 3); keywords = pluginId.split("-").slice(0, 3);
} }
// Create directory structure // Create directory structure
@@ -136,11 +136,10 @@ async function createPlugin() {
name: pluginId, name: pluginId,
description, description,
version: "1.0.0", version: "1.0.0",
keywords,
author: { name: "Awesome Copilot Community" }, author: { name: "Awesome Copilot Community" },
repository: "https://github.com/github/awesome-copilot", repository: "https://github.com/github/awesome-copilot",
license: "MIT", license: "MIT",
tags,
items: [],
}; };
fs.writeFileSync( fs.writeFileSync(
@@ -177,7 +176,7 @@ MIT
console.log(`\n✅ Created plugin: ${pluginDir}`); console.log(`\n✅ Created plugin: ${pluginDir}`);
console.log("\n📝 Next steps:"); console.log("\n📝 Next steps:");
console.log(`1. Add agents, prompts, or instructions to plugins/${pluginId}/`); console.log(`1. Add agents, prompts, or instructions to plugins/${pluginId}/`);
console.log(`2. Update plugins/${pluginId}/.github/plugin/plugin.json to list your items`); console.log(`2. Update plugins/${pluginId}/.github/plugin/plugin.json with your metadata`);
console.log(`3. Edit plugins/${pluginId}/README.md to describe your plugin`); console.log(`3. Edit plugins/${pluginId}/README.md to describe your plugin`);
console.log("4. Run 'npm run build' to regenerate documentation"); console.log("4. Run 'npm run build' to regenerate documentation");
} catch (error) { } catch (error) {

View File

@@ -5,7 +5,7 @@ import path from "path";
import { ROOT_FOLDER } from "./constants.mjs"; import { ROOT_FOLDER } from "./constants.mjs";
const PLUGINS_DIR = path.join(ROOT_FOLDER, "plugins"); const PLUGINS_DIR = path.join(ROOT_FOLDER, "plugins");
const MARKETPLACE_FILE = path.join(ROOT_FOLDER, ".github", "plugin", "marketplace.json"); const MARKETPLACE_FILE = path.join(ROOT_FOLDER, ".github/plugin", "marketplace.json");
/** /**
* Read plugin metadata from plugin.json file * Read plugin metadata from plugin.json file
@@ -13,7 +13,7 @@ const MARKETPLACE_FILE = path.join(ROOT_FOLDER, ".github", "plugin", "marketplac
* @returns {object|null} - Plugin metadata or null if not found * @returns {object|null} - Plugin metadata or null if not found
*/ */
function readPluginMetadata(pluginDir) { function readPluginMetadata(pluginDir) {
const pluginJsonPath = path.join(pluginDir, ".github", "plugin", "plugin.json"); const pluginJsonPath = path.join(pluginDir, ".github/plugin", "plugin.json");
if (!fs.existsSync(pluginJsonPath)) { if (!fs.existsSync(pluginJsonPath)) {
console.warn(`Warning: No plugin.json found for ${path.basename(pluginDir)}`); console.warn(`Warning: No plugin.json found for ${path.basename(pluginDir)}`);

View File

@@ -488,7 +488,7 @@ function generatePluginsData(gitDates) {
const plugins = []; const plugins = [];
if (!fs.existsSync(PLUGINS_DIR)) { if (!fs.existsSync(PLUGINS_DIR)) {
return plugins; return { items: [], filters: { tags: [] } };
} }
const pluginDirs = fs.readdirSync(PLUGINS_DIR, { withFileTypes: true }) const pluginDirs = fs.readdirSync(PLUGINS_DIR, { withFileTypes: true })
@@ -496,7 +496,7 @@ function generatePluginsData(gitDates) {
for (const dir of pluginDirs) { for (const dir of pluginDirs) {
const pluginDir = path.join(PLUGINS_DIR, dir.name); const pluginDir = path.join(PLUGINS_DIR, dir.name);
const jsonPath = path.join(pluginDir, ".github", "plugin", "plugin.json"); const jsonPath = path.join(pluginDir, ".github/plugin", "plugin.json");
if (!fs.existsSync(jsonPath)) continue; if (!fs.existsSync(jsonPath)) continue;
@@ -505,17 +505,25 @@ function generatePluginsData(gitDates) {
const relPath = `plugins/${dir.name}`; const relPath = `plugins/${dir.name}`;
const dates = gitDates[relPath] || gitDates[`${relPath}/`] || {}; const dates = gitDates[relPath] || gitDates[`${relPath}/`] || {};
// Build items list from spec fields (agents, commands, skills)
const items = [
...(data.agents || []).map(p => ({ kind: "agent", path: p })),
...(data.commands || []).map(p => ({ kind: "prompt", path: p })),
...(data.skills || []).map(p => ({ kind: "skill", path: p })),
];
const tags = data.keywords || data.tags || [];
plugins.push({ plugins.push({
id: dir.name, id: dir.name,
name: data.name || dir.name, name: data.name || dir.name,
description: data.description || "", description: data.description || "",
path: relPath, path: relPath,
tags: data.tags || [], tags: tags,
featured: data.featured || false, itemCount: items.length,
itemCount: data.items ? data.items.length : 0, items: items,
items: data.items || [],
lastUpdated: dates.lastModified || null, lastUpdated: dates.lastModified || null,
searchText: `${data.name || dir.name} ${data.description || ""} ${(data.tags || []).join(" ")}`.toLowerCase(), searchText: `${data.name || dir.name} ${data.description || ""} ${tags.join(" ")}`.toLowerCase(),
}); });
} catch (e) { } catch (e) {
console.warn(`Failed to parse plugin: ${dir.name}`, e.message); console.warn(`Failed to parse plugin: ${dir.name}`, e.message);
@@ -525,11 +533,7 @@ function generatePluginsData(gitDates) {
// Collect all unique tags // Collect all unique tags
const allTags = [...new Set(plugins.flatMap(p => p.tags))].sort(); const allTags = [...new Set(plugins.flatMap(p => p.tags))].sort();
const sortedPlugins = plugins.sort((a, b) => { const sortedPlugins = plugins.sort((a, b) => a.name.localeCompare(b.name));
if (a.featured && !b.featured) return -1;
if (!a.featured && b.featured) return 1;
return a.name.localeCompare(b.name);
});
return { return {
items: sortedPlugins, items: sortedPlugins,

167
eng/materialize-plugins.mjs Normal file
View File

@@ -0,0 +1,167 @@
#!/usr/bin/env node
import fs from "fs";
import path from "path";
import { ROOT_FOLDER } from "./constants.mjs";
const PLUGINS_DIR = path.join(ROOT_FOLDER, "plugins");
/**
* Recursively copy a directory.
*/
function copyDirRecursive(src, dest) {
fs.mkdirSync(dest, { recursive: true });
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
const srcPath = path.join(src, entry.name);
const destPath = path.join(dest, entry.name);
if (entry.isDirectory()) {
copyDirRecursive(srcPath, destPath);
} else {
fs.copyFileSync(srcPath, destPath);
}
}
}
/**
* Resolve a plugin-relative path to the repo-root source file.
*
* ./agents/foo.md → ROOT/agents/foo.agent.md
* ./commands/bar.md → ROOT/prompts/bar.prompt.md
* ./skills/baz/ → ROOT/skills/baz/
*/
function resolveSource(relPath) {
const basename = path.basename(relPath, ".md");
if (relPath.startsWith("./agents/")) {
return path.join(ROOT_FOLDER, "agents", `${basename}.agent.md`);
}
if (relPath.startsWith("./commands/")) {
return path.join(ROOT_FOLDER, "prompts", `${basename}.prompt.md`);
}
if (relPath.startsWith("./skills/")) {
// Strip trailing slash and get the skill folder name
const skillName = relPath.replace(/^\.\/skills\//, "").replace(/\/$/, "");
return path.join(ROOT_FOLDER, "skills", skillName);
}
return null;
}
function materializePlugins() {
console.log("Materializing plugin files...\n");
if (!fs.existsSync(PLUGINS_DIR)) {
console.error(`Error: Plugins directory not found at ${PLUGINS_DIR}`);
process.exit(1);
}
const pluginDirs = fs.readdirSync(PLUGINS_DIR, { withFileTypes: true })
.filter(entry => entry.isDirectory())
.map(entry => entry.name)
.sort();
let totalAgents = 0;
let totalCommands = 0;
let totalSkills = 0;
let warnings = 0;
let errors = 0;
for (const dirName of pluginDirs) {
const pluginPath = path.join(PLUGINS_DIR, dirName);
const pluginJsonPath = path.join(pluginPath, ".github/plugin", "plugin.json");
if (!fs.existsSync(pluginJsonPath)) {
continue;
}
let metadata;
try {
metadata = JSON.parse(fs.readFileSync(pluginJsonPath, "utf8"));
} catch (err) {
console.error(`Error: Failed to parse ${pluginJsonPath}: ${err.message}`);
errors++;
continue;
}
const pluginName = metadata.name || dirName;
// Process agents
if (Array.isArray(metadata.agents)) {
for (const relPath of metadata.agents) {
const src = resolveSource(relPath);
if (!src) {
console.warn(`${pluginName}: Unknown path format: ${relPath}`);
warnings++;
continue;
}
if (!fs.existsSync(src)) {
console.warn(`${pluginName}: Source not found: ${src}`);
warnings++;
continue;
}
const dest = path.join(pluginPath, relPath.replace(/^\.\//, ""));
fs.mkdirSync(path.dirname(dest), { recursive: true });
fs.copyFileSync(src, dest);
totalAgents++;
}
}
// Process commands
if (Array.isArray(metadata.commands)) {
for (const relPath of metadata.commands) {
const src = resolveSource(relPath);
if (!src) {
console.warn(`${pluginName}: Unknown path format: ${relPath}`);
warnings++;
continue;
}
if (!fs.existsSync(src)) {
console.warn(`${pluginName}: Source not found: ${src}`);
warnings++;
continue;
}
const dest = path.join(pluginPath, relPath.replace(/^\.\//, ""));
fs.mkdirSync(path.dirname(dest), { recursive: true });
fs.copyFileSync(src, dest);
totalCommands++;
}
}
// Process skills
if (Array.isArray(metadata.skills)) {
for (const relPath of metadata.skills) {
const src = resolveSource(relPath);
if (!src) {
console.warn(`${pluginName}: Unknown path format: ${relPath}`);
warnings++;
continue;
}
if (!fs.existsSync(src) || !fs.statSync(src).isDirectory()) {
console.warn(`${pluginName}: Source directory not found: ${src}`);
warnings++;
continue;
}
const dest = path.join(pluginPath, relPath.replace(/^\.\//, "").replace(/\/$/, ""));
copyDirRecursive(src, dest);
totalSkills++;
}
}
const counts = [];
if (metadata.agents?.length) counts.push(`${metadata.agents.length} agents`);
if (metadata.commands?.length) counts.push(`${metadata.commands.length} commands`);
if (metadata.skills?.length) counts.push(`${metadata.skills.length} skills`);
if (counts.length) {
console.log(`${pluginName}: ${counts.join(", ")}`);
}
}
console.log(`\nDone. Copied ${totalAgents} agents, ${totalCommands} commands, ${totalSkills} skills.`);
if (warnings > 0) {
console.log(`${warnings} warning(s).`);
}
if (errors > 0) {
console.error(`${errors} error(s).`);
process.exit(1);
}
}
materializePlugins();

View File

@@ -710,7 +710,7 @@ function generateUnifiedModeSection(cfg) {
* Read and parse a plugin.json file from a plugin directory. * Read and parse a plugin.json file from a plugin directory.
*/ */
function readPluginJson(pluginDir) { function readPluginJson(pluginDir) {
const jsonPath = path.join(pluginDir, ".github", "plugin", "plugin.json"); const jsonPath = path.join(pluginDir, ".github/plugin", "plugin.json");
if (!fs.existsSync(jsonPath)) return null; if (!fs.existsSync(jsonPath)) return null;
try { try {
return JSON.parse(fs.readFileSync(jsonPath, "utf-8")); return JSON.parse(fs.readFileSync(jsonPath, "utf-8"));
@@ -783,13 +783,13 @@ function generatePluginsSection(pluginsDir) {
const description = formatTableCell( const description = formatTableCell(
plugin.description || "No description" plugin.description || "No description"
); );
const itemCount = plugin.items ? plugin.items.length : 0; const itemCount = (plugin.agents || []).length + (plugin.commands || []).length + (plugin.skills || []).length;
const tags = plugin.tags ? plugin.tags.join(", ") : ""; const keywords = plugin.keywords ? plugin.keywords.join(", ") : "";
const link = `../plugins/${dir}/README.md`; const link = `../plugins/${dir}/README.md`;
const displayName = isFeatured ? `${name}` : name; const displayName = isFeatured ? `${name}` : name;
pluginsContent += `| [${displayName}](${link}) | ${description} | ${itemCount} items | ${tags} |\n`; pluginsContent += `| [${displayName}](${link}) | ${description} | ${itemCount} items | ${keywords} |\n`;
} }
return `${TEMPLATES.pluginsSection}\n${TEMPLATES.pluginsUsage}\n\n${pluginsContent}`; return `${TEMPLATES.pluginsSection}\n${TEMPLATES.pluginsUsage}\n\n${pluginsContent}`;
@@ -826,8 +826,8 @@ function generateFeaturedPluginsSection(pluginsDir) {
const description = formatTableCell( const description = formatTableCell(
plugin.description || "No description" plugin.description || "No description"
); );
const tags = plugin.tags ? plugin.tags.join(", ") : ""; const keywords = plugin.keywords ? plugin.keywords.join(", ") : "";
const itemCount = plugin.items ? plugin.items.length : 0; const itemCount = (plugin.agents || []).length + (plugin.commands || []).length + (plugin.skills || []).length;
return { return {
dir, dir,
@@ -835,7 +835,7 @@ function generateFeaturedPluginsSection(pluginsDir) {
pluginId: name, pluginId: name,
name, name,
description, description,
tags, keywords,
itemCount, itemCount,
}; };
}, },
@@ -861,10 +861,10 @@ function generateFeaturedPluginsSection(pluginsDir) {
// Generate table rows for each featured plugin // Generate table rows for each featured plugin
for (const entry of featuredPlugins) { for (const entry of featuredPlugins) {
const { dir, name, description, tags, itemCount } = entry; const { dir, name, description, keywords, itemCount } = entry;
const readmeLink = `plugins/${dir}/README.md`; const readmeLink = `plugins/${dir}/README.md`;
featuredContent += `| [${name}](${readmeLink}) | ${description} | ${itemCount} items | ${tags} |\n`; featuredContent += `| [${name}](${readmeLink}) | ${description} | ${itemCount} items | ${keywords} |\n`;
} }
return `${TEMPLATES.featuredPluginsSection}\n\n${featuredContent}`; return `${TEMPLATES.featuredPluginsSection}\n\n${featuredContent}`;

View File

@@ -6,8 +6,6 @@ import { ROOT_FOLDER } from "./constants.mjs";
const PLUGINS_DIR = path.join(ROOT_FOLDER, "plugins"); const PLUGINS_DIR = path.join(ROOT_FOLDER, "plugins");
const VALID_ITEM_KINDS = ["prompt", "agent", "instruction", "skill", "hook"];
// Validation functions // Validation functions
function validateName(name, folderName) { function validateName(name, folderName) {
const errors = []; const errors = [];
@@ -44,82 +42,74 @@ function validateVersion(version) {
return null; return null;
} }
function validateTags(tags) { function validateKeywords(keywords) {
if (tags === undefined) return null; if (keywords === undefined) return null;
if (!Array.isArray(tags)) { if (!Array.isArray(keywords)) {
return "tags must be an array"; return "keywords must be an array";
} }
if (tags.length > 10) { if (keywords.length > 10) {
return "maximum 10 tags allowed"; return "maximum 10 keywords allowed";
} }
for (const tag of tags) { for (const keyword of keywords) {
if (typeof tag !== "string") { if (typeof keyword !== "string") {
return "all tags must be strings"; return "all keywords must be strings";
} }
if (!/^[a-z0-9-]+$/.test(tag)) { if (!/^[a-z0-9-]+$/.test(keyword)) {
return `tag "${tag}" must contain only lowercase letters, numbers, and hyphens`; return `keyword "${keyword}" must contain only lowercase letters, numbers, and hyphens`;
} }
if (tag.length < 1 || tag.length > 30) { if (keyword.length < 1 || keyword.length > 30) {
return `tag "${tag}" must be between 1 and 30 characters`; return `keyword "${keyword}" must be between 1 and 30 characters`;
} }
} }
return null; return null;
} }
function validateFeatured(featured) { function validateSpecPaths(plugin) {
if (featured === undefined) return null;
if (typeof featured !== "boolean") {
return "featured must be a boolean";
}
return null;
}
function validateDisplay(display) {
if (display === undefined) return null;
if (typeof display !== "object" || Array.isArray(display) || display === null) {
return "display must be an object";
}
if (display.ordering !== undefined) {
if (!["manual", "alpha"].includes(display.ordering)) {
return "display.ordering must be 'manual' or 'alpha'";
}
}
if (display.show_badge !== undefined) {
if (typeof display.show_badge !== "boolean") {
return "display.show_badge must be a boolean";
}
}
return null;
}
function validateItems(items) {
if (items === undefined) return [];
const errors = []; const errors = [];
if (!Array.isArray(items)) { const specs = {
errors.push("items must be an array"); agents: { prefix: "./agents/", suffix: ".md", repoDir: "agents", repoSuffix: ".agent.md" },
return errors; commands: { prefix: "./commands/", suffix: ".md", repoDir: "prompts", repoSuffix: ".prompt.md" },
} skills: { prefix: "./skills/", suffix: "/", repoDir: "skills", repoFile: "SKILL.md" },
for (let i = 0; i < items.length; i++) { };
const item = items[i];
if (!item || typeof item !== "object") { for (const [field, spec] of Object.entries(specs)) {
errors.push(`items[${i}] must be an object`); const arr = plugin[field];
if (arr === undefined) continue;
if (!Array.isArray(arr)) {
errors.push(`${field} must be an array`);
continue; continue;
} }
if (!item.path || typeof item.path !== "string") { for (let i = 0; i < arr.length; i++) {
errors.push(`items[${i}] must have a path string`); const p = arr[i];
} if (typeof p !== "string") {
if (!item.kind || typeof item.kind !== "string") { errors.push(`${field}[${i}] must be a string`);
errors.push(`items[${i}] must have a kind string`); continue;
} else if (!VALID_ITEM_KINDS.includes(item.kind)) { }
errors.push( if (!p.startsWith("./")) {
`items[${i}] kind must be one of: ${VALID_ITEM_KINDS.join(", ")}` errors.push(`${field}[${i}] must start with "./"`);
); continue;
} }
// Validate referenced path exists relative to repo root if (!p.startsWith(spec.prefix)) {
if (item.path && typeof item.path === "string") { errors.push(`${field}[${i}] must start with "${spec.prefix}"`);
const filePath = path.join(ROOT_FOLDER, item.path); continue;
if (!fs.existsSync(filePath)) { }
errors.push(`items[${i}] file does not exist: ${item.path}`); if (!p.endsWith(spec.suffix)) {
errors.push(`${field}[${i}] must end with "${spec.suffix}"`);
continue;
}
// Validate the source file exists at repo root
const basename = p.slice(spec.prefix.length, p.length - spec.suffix.length);
if (field === "skills") {
const skillDir = path.join(ROOT_FOLDER, spec.repoDir, basename);
const skillFile = path.join(skillDir, spec.repoFile);
if (!fs.existsSync(skillFile)) {
errors.push(`${field}[${i}] source not found: ${spec.repoDir}/${basename}/SKILL.md`);
}
} else {
const srcFile = path.join(ROOT_FOLDER, spec.repoDir, basename + spec.repoSuffix);
if (!fs.existsSync(srcFile)) {
errors.push(`${field}[${i}] source not found: ${spec.repoDir}/${basename}${spec.repoSuffix}`);
}
} }
} }
} }
@@ -131,7 +121,7 @@ function validatePlugin(folderName) {
const errors = []; const errors = [];
// Rule 1: Must have .github/plugin/plugin.json // Rule 1: Must have .github/plugin/plugin.json
const pluginJsonPath = path.join(pluginDir, ".github", "plugin", "plugin.json"); const pluginJsonPath = path.join(pluginDir, ".github/plugin", "plugin.json");
if (!fs.existsSync(pluginJsonPath)) { if (!fs.existsSync(pluginJsonPath)) {
errors.push("missing required file: .github/plugin/plugin.json"); errors.push("missing required file: .github/plugin/plugin.json");
return errors; return errors;
@@ -163,21 +153,13 @@ function validatePlugin(folderName) {
const versionError = validateVersion(plugin.version); const versionError = validateVersion(plugin.version);
if (versionError) errors.push(versionError); if (versionError) errors.push(versionError);
// Rule 5: tags // Rule 5: keywords (or tags for backward compat)
const tagsError = validateTags(plugin.tags); const keywordsError = validateKeywords(plugin.keywords ?? plugin.tags);
if (tagsError) errors.push(tagsError); if (keywordsError) errors.push(keywordsError);
// Rule 8: featured // Rule 6: agents, commands, skills paths
const featuredError = validateFeatured(plugin.featured); const specErrors = validateSpecPaths(plugin);
if (featuredError) errors.push(featuredError); errors.push(...specErrors);
// Rule 9: display
const displayError = validateDisplay(plugin.display);
if (displayError) errors.push(displayError);
// Rule 6 & 7: items
const itemErrors = validateItems(plugin.items);
errors.push(...itemErrors);
return errors; return errors;
} }

View File

@@ -7,38 +7,20 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"github-copilot", "github-copilot",
"discovery", "discovery",
"meta", "meta",
"prompt-engineering", "prompt-engineering",
"agents" "agents"
], ],
"featured": true, "agents": [
"display": { "./agents/meta-agentic-project-scaffold.md"
"ordering": "alpha", ],
"show_badge": true "commands": [
}, "./commands/suggest-awesome-github-copilot-skills.md",
"items": [ "./commands/suggest-awesome-github-copilot-instructions.md",
{ "./commands/suggest-awesome-github-copilot-prompts.md",
"path": "prompts/suggest-awesome-github-copilot-skills.prompt.md", "./commands/suggest-awesome-github-copilot-agents.md"
"kind": "prompt"
},
{
"path": "prompts/suggest-awesome-github-copilot-instructions.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/suggest-awesome-github-copilot-prompts.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/suggest-awesome-github-copilot-agents.prompt.md",
"kind": "prompt"
},
{
"path": "agents/meta-agentic-project-scaffold.agent.md",
"kind": "agent"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/meta-agentic-project-scaffold.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/suggest-awesome-github-copilot-agents.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/suggest-awesome-github-copilot-instructions.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/suggest-awesome-github-copilot-prompts.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/suggest-awesome-github-copilot-skills.prompt.md

View File

@@ -7,7 +7,7 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"azure", "azure",
"cloud", "cloud",
"infrastructure", "infrastructure",
@@ -17,82 +17,17 @@
"architecture", "architecture",
"devops" "devops"
], ],
"display": { "agents": [
"ordering": "alpha", "./agents/azure-principal-architect.md",
"show_badge": true "./agents/azure-saas-architect.md",
}, "./agents/azure-logic-apps-expert.md",
"items": [ "./agents/azure-verified-modules-bicep.md",
{ "./agents/azure-verified-modules-terraform.md",
"path": "agents/azure-principal-architect.agent.md", "./agents/terraform-azure-planning.md",
"kind": "agent" "./agents/terraform-azure-implement.md"
}, ],
{ "commands": [
"path": "agents/azure-saas-architect.agent.md", "./commands/azure-resource-health-diagnose.md",
"kind": "agent" "./commands/az-cost-optimize.md"
},
{
"path": "agents/azure-logic-apps-expert.agent.md",
"kind": "agent"
},
{
"path": "agents/azure-verified-modules-bicep.agent.md",
"kind": "agent"
},
{
"path": "agents/azure-verified-modules-terraform.agent.md",
"kind": "agent"
},
{
"path": "agents/terraform-azure-planning.agent.md",
"kind": "agent"
},
{
"path": "agents/terraform-azure-implement.agent.md",
"kind": "agent"
},
{
"path": "instructions/bicep-code-best-practices.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/terraform.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/terraform-azure.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/azure-verified-modules-terraform.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/azure-functions-typescript.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/azure-logic-apps-power-automate.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/azure-devops-pipelines.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/containerization-docker-best-practices.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/kubernetes-deployment-best-practices.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/azure-resource-health-diagnose.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/az-cost-optimize.prompt.md",
"kind": "prompt"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/azure-logic-apps-expert.agent.md

View File

@@ -1 +0,0 @@
../../../agents/azure-principal-architect.agent.md

View File

@@ -1 +0,0 @@
../../../agents/azure-saas-architect.agent.md

View File

@@ -1 +0,0 @@
../../../agents/azure-verified-modules-bicep.agent.md

View File

@@ -1 +0,0 @@
../../../agents/azure-verified-modules-terraform.agent.md

View File

@@ -1 +0,0 @@
../../../agents/terraform-azure-implement.agent.md

View File

@@ -1 +0,0 @@
../../../agents/terraform-azure-planning.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/az-cost-optimize.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/azure-resource-health-diagnose.prompt.md

View File

@@ -7,7 +7,7 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"cast-imaging", "cast-imaging",
"software-analysis", "software-analysis",
"architecture", "architecture",
@@ -15,25 +15,9 @@
"impact-analysis", "impact-analysis",
"devops" "devops"
], ],
"display": { "agents": [
"ordering": "manual", "./agents/cast-imaging-software-discovery.md",
"show_badge": true "./agents/cast-imaging-impact-analysis.md",
}, "./agents/cast-imaging-structural-quality-advisor.md"
"items": [
{
"path": "agents/cast-imaging-software-discovery.agent.md",
"kind": "agent",
"usage": "This agent is designed for comprehensive software application discovery and architectural mapping. It helps users understand code structure, dependencies, and architectural patterns, including database schemas and physical source file locations.\n\nIdeal for:\n- Exploring available applications and getting overviews.\n- Understanding system architecture and component structure.\n- Analyzing dependencies and database schemas (tables/columns).\n- Locating and analyzing physical source files."
},
{
"path": "agents/cast-imaging-impact-analysis.agent.md",
"kind": "agent",
"usage": "This agent specializes in comprehensive change impact assessment and risk analysis. It assists users in understanding ripple effects of code changes, identifying architectural coupling (shared resources), and developing testing strategies.\n\nIdeal for:\n- Assessing potential impacts of code modifications.\n- Identifying architectural coupling and shared code risks.\n- Analyzing impacts spanning multiple applications.\n- Developing targeted testing approaches based on change scope."
},
{
"path": "agents/cast-imaging-structural-quality-advisor.agent.md",
"kind": "agent",
"usage": "This agent focuses on identifying, analyzing, and providing remediation guidance for structural quality issues. It supports specialized standards including Security (CVE), Green IT deficiencies, and ISO-5055 compliance.\n\nIdeal for:\n- Identifying and understanding code quality issues and structural flaws.\n- Checking compliance with Security (CVE), Green IT, and ISO-5055 standards.\n- Prioritizing quality issues based on business impact and risk.\n- Analyzing quality trends and providing remediation guidance."
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/cast-imaging-impact-analysis.agent.md

View File

@@ -1 +0,0 @@
../../../agents/cast-imaging-software-discovery.agent.md

View File

@@ -1 +0,0 @@
../../../agents/cast-imaging-structural-quality-advisor.agent.md

View File

@@ -7,27 +7,15 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"clojure", "clojure",
"repl", "repl",
"interactive-programming" "interactive-programming"
], ],
"display": { "agents": [
"ordering": "manual", "./agents/clojure-interactive-programming.md"
"show_badge": true ],
}, "commands": [
"items": [ "./commands/remember-interactive-programming.md"
{
"path": "instructions/clojure.instructions.md",
"kind": "instruction"
},
{
"path": "agents/clojure-interactive-programming.agent.md",
"kind": "agent"
},
{
"path": "prompts/remember-interactive-programming.prompt.md",
"kind": "prompt"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/clojure-interactive-programming.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/remember-interactive-programming.prompt.md

View File

@@ -7,41 +7,19 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"context", "context",
"productivity", "productivity",
"refactoring", "refactoring",
"best-practices", "best-practices",
"architecture" "architecture"
], ],
"display": { "agents": [
"ordering": "manual", "./agents/context-architect.md"
"show_badge": true ],
}, "commands": [
"items": [ "./commands/context-map.md",
{ "./commands/what-context-needed.md",
"path": "instructions/context-engineering.instructions.md", "./commands/refactor-plan.md"
"kind": "instruction"
},
{
"path": "agents/context-architect.agent.md",
"kind": "agent",
"usage": "recommended\n\nThe Context Architect agent helps plan multi-file changes by mapping dependencies\nand identifying all relevant files before making modifications.\n\nUse this agent when:\n- Planning refactors that span multiple files\n- Adding features that touch several modules\n- Investigating unfamiliar parts of the codebase\n\nExample usage:\n```\n@context-architect I need to add rate limiting to all API endpoints.\nWhat files are involved and what's the best approach?\n```\n\nFor best results:\n- Describe the high-level goal, not just the immediate task\n- Let the agent search before you provide files\n- Review the context map before approving changes"
},
{
"path": "prompts/context-map.prompt.md",
"kind": "prompt",
"usage": "optional\n\nUse before any significant change to understand the blast radius.\nProduces a structured map of files, dependencies, and tests."
},
{
"path": "prompts/what-context-needed.prompt.md",
"kind": "prompt",
"usage": "optional\n\nUse when Copilot gives a generic or incorrect answer.\nAsks Copilot to explicitly list what files it needs to see."
},
{
"path": "prompts/refactor-plan.prompt.md",
"kind": "prompt",
"usage": "optional\n\nUse for multi-file refactors. Produces a phased plan with\nverification steps and rollback procedures."
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/context-architect.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/context-map.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/refactor-plan.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/what-context-needed.prompt.md

View File

@@ -7,7 +7,7 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"copilot-sdk", "copilot-sdk",
"sdk", "sdk",
"csharp", "csharp",
@@ -18,31 +18,7 @@
"ai", "ai",
"github-copilot" "github-copilot"
], ],
"featured": true, "skills": [
"display": { "./skills/copilot-sdk/"
"ordering": "manual",
"show_badge": true
},
"items": [
{
"path": "instructions/copilot-sdk-csharp.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/copilot-sdk-go.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/copilot-sdk-nodejs.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/copilot-sdk-python.instructions.md",
"kind": "instruction"
},
{
"path": "skills/copilot-sdk/SKILL.md",
"kind": "skill"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../skills/copilot-sdk

View File

@@ -7,55 +7,23 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": ["csharp", "dotnet", "aspnet", "testing"], "keywords": [
"display": { "csharp",
"ordering": "alpha", "dotnet",
"show_badge": false "aspnet",
}, "testing"
"items": [ ],
{ "agents": [
"path": "prompts/csharp-async.prompt.md", "./agents/expert-dotnet-software-engineer.md"
"kind": "prompt" ],
}, "commands": [
{ "./commands/csharp-async.md",
"path": "prompts/aspnet-minimal-api-openapi.prompt.md", "./commands/aspnet-minimal-api-openapi.md",
"kind": "prompt" "./commands/csharp-xunit.md",
}, "./commands/csharp-nunit.md",
{ "./commands/csharp-mstest.md",
"path": "instructions/csharp.instructions.md", "./commands/csharp-tunit.md",
"kind": "instruction" "./commands/dotnet-best-practices.md",
}, "./commands/dotnet-upgrade.md"
{
"path": "instructions/dotnet-architecture-good-practices.instructions.md",
"kind": "instruction"
},
{
"path": "agents/expert-dotnet-software-engineer.agent.md",
"kind": "agent"
},
{
"path": "prompts/csharp-xunit.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/csharp-nunit.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/csharp-mstest.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/csharp-tunit.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/dotnet-best-practices.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/dotnet-upgrade.prompt.md",
"kind": "prompt"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/expert-dotnet-software-engineer.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/aspnet-minimal-api-openapi.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/csharp-async.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/csharp-mstest.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/csharp-nunit.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/csharp-tunit.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/csharp-xunit.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/dotnet-best-practices.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/dotnet-upgrade.prompt.md

View File

@@ -7,30 +7,17 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"csharp", "csharp",
"mcp", "mcp",
"model-context-protocol", "model-context-protocol",
"dotnet", "dotnet",
"server-development" "server-development"
], ],
"display": { "agents": [
"ordering": "manual", "./agents/csharp-mcp-expert.md"
"show_badge": true ],
}, "commands": [
"items": [ "./commands/csharp-mcp-server-generator.md"
{
"path": "instructions/csharp-mcp-server.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/csharp-mcp-server-generator.prompt.md",
"kind": "prompt"
},
{
"path": "agents/csharp-mcp-expert.agent.md",
"kind": "agent",
"usage": "recommended\n\nThis chat mode provides expert guidance for building MCP servers in C#.\n\nThis chat mode is ideal for:\n- Creating new MCP server projects\n- Implementing tools and prompts\n- Debugging protocol issues\n- Optimizing server performance\n- Learning MCP best practices\n\nTo get the best results, consider:\n- Using the instruction file to set context for all Copilot interactions\n- Using the prompt to generate initial project structure\n- Switching to the expert chat mode for detailed implementation help\n- Providing specific details about what tools or functionality you need"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/csharp-mcp-expert.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/csharp-mcp-server-generator.prompt.md

View File

@@ -7,7 +7,7 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"database", "database",
"sql", "sql",
"postgresql", "postgresql",
@@ -17,42 +17,14 @@
"queries", "queries",
"data-management" "data-management"
], ],
"display": { "agents": [
"ordering": "alpha", "./agents/postgresql-dba.md",
"show_badge": true "./agents/ms-sql-dba.md"
}, ],
"items": [ "commands": [
{ "./commands/sql-optimization.md",
"path": "agents/postgresql-dba.agent.md", "./commands/sql-code-review.md",
"kind": "agent" "./commands/postgresql-optimization.md",
}, "./commands/postgresql-code-review.md"
{
"path": "agents/ms-sql-dba.agent.md",
"kind": "agent"
},
{
"path": "instructions/ms-sql-dba.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/sql-sp-generation.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/sql-optimization.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/sql-code-review.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/postgresql-optimization.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/postgresql-code-review.prompt.md",
"kind": "prompt"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/ms-sql-dba.agent.md

View File

@@ -1 +0,0 @@
../../../agents/postgresql-dba.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/postgresql-code-review.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/postgresql-optimization.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/sql-code-review.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/sql-optimization.prompt.md

View File

@@ -7,84 +7,16 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"dataverse", "dataverse",
"python", "python",
"integration", "integration",
"sdk" "sdk"
], ],
"display": { "commands": [
"ordering": "alpha", "./commands/dataverse-python-quickstart.md",
"show_badge": true "./commands/dataverse-python-advanced-patterns.md",
}, "./commands/dataverse-python-production-code.md",
"items": [ "./commands/dataverse-python-usecase-builder.md"
{
"path": "instructions/dataverse-python-sdk.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-api-reference.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-modules.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-best-practices.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-advanced-features.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-agentic-workflows.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-authentication-security.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-error-handling.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-file-operations.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-pandas-integration.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-performance-optimization.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-real-world-usecases.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-testing-debugging.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/dataverse-python-quickstart.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/dataverse-python-advanced-patterns.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/dataverse-python-production-code.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/dataverse-python-usecase-builder.prompt.md",
"kind": "prompt"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../prompts/dataverse-python-advanced-patterns.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/dataverse-python-production-code.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/dataverse-python-quickstart.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/dataverse-python-usecase-builder.prompt.md

View File

@@ -7,36 +7,17 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"devops", "devops",
"incident-response", "incident-response",
"oncall", "oncall",
"azure" "azure"
], ],
"display": { "agents": [
"ordering": "manual", "./agents/azure-principal-architect.md"
"show_badge": true ],
}, "commands": [
"items": [ "./commands/azure-resource-health-diagnose.md",
{ "./commands/multi-stage-dockerfile.md"
"path": "prompts/azure-resource-health-diagnose.prompt.md",
"kind": "prompt"
},
{
"path": "instructions/devops-core-principles.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/containerization-docker-best-practices.instructions.md",
"kind": "instruction"
},
{
"path": "agents/azure-principal-architect.agent.md",
"kind": "agent"
},
{
"path": "prompts/multi-stage-dockerfile.prompt.md",
"kind": "prompt"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/azure-principal-architect.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/azure-resource-health-diagnose.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/multi-stage-dockerfile.prompt.md

View File

@@ -7,32 +7,15 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"architecture", "architecture",
"planning", "planning",
"research", "research",
"tasks", "tasks",
"implementation" "implementation"
], ],
"display": { "agents": [
"ordering": "alpha", "./agents/task-researcher.md",
"show_badge": false "./agents/task-planner.md"
},
"items": [
{
"path": "agents/task-researcher.agent.md",
"kind": "agent",
"usage": "Now you can iterate on research for your tasks!\n\n```markdown, research.prompt.md\n---\nmode: task-researcher\ntitle: Research microsoft fabric realtime intelligence terraform support\n---\nReview the microsoft documentation for fabric realtime intelligence\nand come up with ideas on how to implement this support into our terraform components.\n```\n\nResearch is dumped out into a .copilot-tracking/research/*-research.md file and will include discoveries for GHCP along with examples and schema that will be useful during implementation.\n\nAlso, task-researcher will provide additional ideas for implementation which you can work with GitHub Copilot on selecting the right one to focus on."
},
{
"path": "agents/task-planner.agent.md",
"kind": "agent",
"usage": "Also, task-researcher will provide additional ideas for implementation which you can work with GitHub Copilot on selecting the right one to focus on.\n\n```markdown, task-plan.prompt.md\n---\nmode: task-planner\ntitle: Plan microsoft fabric realtime intelligence terraform support\n---\n#file: .copilot-tracking/research/*-fabric-rti-blueprint-modification-research.md\nBuild a plan to support adding fabric rti to this project\n```\n\n`task-planner` will help you create a plan for implementing your task(s). It will use your fully researched ideas or build new research if not already provided.\n\n`task-planner` will produce three (3) files that will be used by `task-implementation.instructions.md`.\n\n* `.copilot-tracking/plan/*-plan.instructions.md`\n\n * A newly generated instructions file that has the plan as a checklist of Phases and Tasks.\n* `.copilot-tracking/details/*-details.md`\n\n * The details for the implementation, the plan file refers to this file for specific details (important if you have a big plan).\n* `.copilot-tracking/prompts/implement-*.prompt.md`\n\n * A newly generated prompt file that will create a `.copilot-tracking/changes/*-changes.md` file and proceed to implement the changes.\n\nContinue to use `task-planner` to iterate on the plan until you have exactly what you want done to your codebase."
},
{
"path": "instructions/task-implementation.instructions.md",
"kind": "instruction",
"usage": "Continue to use `task-planner` to iterate on the plan until you have exactly what you want done to your codebase.\n\nWhen you are ready to implement the plan, **create a new chat** and switch to `Agent` mode then fire off the newly generated prompt.\n\n```markdown, implement-fabric-rti-changes.prompt.md\n---\nmode: agent\ntitle: Implement microsoft fabric realtime intelligence terraform support\n---\n/implement-fabric-rti-blueprint-modification phaseStop=true\n```\n\nThis prompt has the added benefit of attaching the plan as instructions, which helps with keeping the plan in context throughout the whole conversation.\n\n**Expert Warning** ->>Use `phaseStop=false` to have Copilot implement the whole plan without stopping. Additionally, you can use `taskStop=true` to have Copilot stop after every Task implementation for finer detail control.\n\nTo use these generated instructions and prompts, you'll need to update your `settings.json` accordingly:\n\n```json\n \"chat.instructionsFilesLocations\": {\n // Existing instructions folders...\n \".copilot-tracking/plans\": true\n },\n \"chat.promptFilesLocations\": {\n // Existing prompts folders...\n \".copilot-tracking/prompts\": true\n },\n```"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/task-planner.agent.md

View File

@@ -1 +0,0 @@
../../../agents/task-researcher.agent.md

View File

@@ -7,7 +7,7 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"frontend", "frontend",
"web", "web",
"react", "react",
@@ -18,54 +18,12 @@
"angular", "angular",
"vue" "vue"
], ],
"display": { "agents": [
"ordering": "alpha", "./agents/expert-react-frontend-engineer.md",
"show_badge": true "./agents/electron-angular-native.md"
}, ],
"items": [ "commands": [
{ "./commands/playwright-explore-website.md",
"path": "agents/expert-react-frontend-engineer.agent.md", "./commands/playwright-generate-test.md"
"kind": "agent"
},
{
"path": "agents/electron-angular-native.agent.md",
"kind": "agent"
},
{
"path": "instructions/reactjs.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/angular.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/vuejs3.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/nextjs.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/nextjs-tailwind.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/tanstack-start-shadcn-tailwind.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/nodejs-javascript-vitest.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/playwright-explore-website.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/playwright-generate-test.prompt.md",
"kind": "prompt"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/electron-angular-native.agent.md

View File

@@ -1 +0,0 @@
../../../agents/expert-react-frontend-engineer.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/playwright-explore-website.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/playwright-generate-test.prompt.md

View File

@@ -7,7 +7,7 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"multi-agent", "multi-agent",
"orchestration", "orchestration",
"dag-planning", "dag-planning",
@@ -17,50 +17,14 @@
"automation", "automation",
"security" "security"
], ],
"display": { "agents": [
"ordering": "manual", "./agents/gem-orchestrator.md",
"show_badge": true "./agents/gem-researcher.md",
}, "./agents/gem-planner.md",
"items": [ "./agents/gem-implementer.md",
{ "./agents/gem-browser-tester.md",
"path": "agents/gem-orchestrator.agent.md", "./agents/gem-devops.md",
"kind": "agent", "./agents/gem-reviewer.md",
"usage": "recommended\n\nThe Orchestrator is the coordination hub that coordinates multi-agent workflows, delegates tasks via runSubagent, and synthesizes results. It does not execute tasks directly but manages the overall workflow.\n\nThis agent is ideal for:\n- Coordinating complex multi-agent workflows\n- Managing task delegation and parallel execution\n- Synthesizing results from multiple agents\n- Maintaining plan.yaml state\n\nTo get the best results, consider:\n- Start with the Orchestrator for any complex project\n- Provide clear goals and constraints\n- Review the plan.yaml before execution\n- Use the walkthrough summaries to track progress" "./agents/gem-documentation-writer.md"
},
{
"path": "agents/gem-researcher.agent.md",
"kind": "agent",
"usage": "recommended\n\nThe Researcher gathers codebase context, identifies relevant files/patterns, and returns structured findings. It is typically invoked by the Orchestrator with a specific focus area.\n\nThis agent is ideal for:\n- Understanding codebase structure and patterns\n- Identifying relevant files for a specific feature\n- Gathering context before making changes\n- Researching technical dependencies\n\nTo get the best results, consider:\n- Specify a clear focus area or question\n- Provide context about what you're trying to achieve\n- Use multiple Researchers in parallel for different areas"
},
{
"path": "agents/gem-planner.agent.md",
"kind": "agent",
"usage": "recommended\n\nThe Planner creates DAG-based plans with pre-mortem analysis, presents for approval, and iterates on feedback. It synthesizes research findings into a structured plan.\n\nThis agent is ideal for:\n- Breaking down complex goals into atomic tasks\n- Creating task dependencies (DAG)\n- Running pre-mortem analysis to identify risks\n- Getting approval before execution\n\nTo get the best results, consider:\n- Provide clear research findings from the Researcher\n- Review the plan carefully before approving\n- Ask for iterations if the plan is not optimal\n- Use the plan_review tool for collaborative planning"
},
{
"path": "agents/gem-implementer.agent.md",
"kind": "agent",
"usage": "recommended\n\nThe Implementer executes TDD code changes, ensures verification, and maintains quality. It follows strict TDD discipline with verification commands.\n\nThis agent is ideal for:\n- Implementing features with TDD discipline\n- Writing tests first, then code\n- Ensuring verification commands pass\n- Maintaining code quality\n\nTo get the best results, consider:\n- Always provide verification commands\n- Follow TDD: red, green, refactor\n- Check get_errors after every edit\n- Keep changes minimal and focused"
},
{
"path": "agents/gem-browser-tester.agent.md",
"kind": "agent",
"usage": "optional\n\nThe Browser Tester automates browser testing, UI/UX validation using browser automation tools and visual verification techniques.\n\nThis agent is ideal for:\n- Automated browser testing\n- UI/UX validation\n- Capturing screenshots and snapshots\n- Testing web applications\n\nTo get the best results, consider:\n- Have browser automation tools installed\n- Provide clear test scenarios\n- Use snapshots for debugging\n- Test on different viewports"
},
{
"path": "agents/gem-devops.agent.md",
"kind": "agent",
"usage": "optional\n\nThe DevOps agent manages containers, CI/CD pipelines, and infrastructure deployment. It handles infrastructure as code and deployment automation.\n\nThis agent is ideal for:\n- Setting up CI/CD pipelines\n- Managing containers (Docker, Kubernetes)\n- Infrastructure deployment\n- DevOps automation\n\nTo get the best results, consider:\n- Provide clear infrastructure requirements\n- Use IaC best practices\n- Test pipelines locally\n- Document deployment processes"
},
{
"path": "agents/gem-reviewer.agent.md",
"kind": "agent",
"usage": "recommended\n\nThe Reviewer is a security gatekeeper for critical tasks. It applies OWASP scanning, secrets detection, and compliance verification.\n\nThis agent is ideal for:\n- Security code reviews\n- OWASP Top 10 scanning\n- Secrets and PII detection\n- Compliance verification\n\nTo get the best results, consider:\n- Use for all critical security changes\n- Review findings carefully\n- Address all security issues\n- Keep documentation updated"
},
{
"path": "agents/gem-documentation-writer.agent.md",
"kind": "agent",
"usage": "optional\n\nThe Documentation Writer generates technical docs, diagrams, and maintains code-documentation parity.\n\nThis agent is ideal for:\n- Generating technical documentation\n- Creating diagrams\n- Keeping docs in sync with code\n- API documentation\n\nTo get the best results, consider:\n- Provide clear context and requirements\n- Review generated docs for accuracy\n- Update docs with code changes\n- Use consistent documentation style"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/gem-browser-tester.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-devops.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-documentation-writer.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-implementer.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-orchestrator.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-planner.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-researcher.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-reviewer.agent.md

View File

@@ -7,7 +7,7 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"go", "go",
"golang", "golang",
"mcp", "mcp",
@@ -15,23 +15,10 @@
"server-development", "server-development",
"sdk" "sdk"
], ],
"display": { "agents": [
"ordering": "manual", "./agents/go-mcp-expert.md"
"show_badge": true ],
}, "commands": [
"items": [ "./commands/go-mcp-server-generator.md"
{
"path": "instructions/go-mcp-server.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/go-mcp-server-generator.prompt.md",
"kind": "prompt"
},
{
"path": "agents/go-mcp-expert.agent.md",
"kind": "agent",
"usage": "recommended\n\nThis chat mode provides expert guidance for building MCP servers in Go.\n\nThis chat mode is ideal for:\n- Creating new MCP server projects with Go\n- Implementing type-safe tools with structs and JSON schema tags\n- Setting up stdio or HTTP transports\n- Debugging context handling and error patterns\n- Learning Go MCP best practices with the official SDK\n- Optimizing server performance and concurrency\n\nTo get the best results, consider:\n- Using the instruction file to set context for Go MCP development\n- Using the prompt to generate initial project structure\n- Switching to the expert chat mode for detailed implementation help\n- Specifying whether you need stdio or HTTP transport\n- Providing details about what tools or functionality you need\n- Mentioning if you need resources, prompts, or special capabilities"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/go-mcp-expert.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/go-mcp-server-generator.prompt.md

View File

@@ -7,7 +7,7 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"java", "java",
"springboot", "springboot",
"quarkus", "quarkus",
@@ -15,58 +15,10 @@
"junit", "junit",
"javadoc" "javadoc"
], ],
"display": { "commands": [
"ordering": "alpha", "./commands/java-docs.md",
"show_badge": false "./commands/java-junit.md",
}, "./commands/java-springboot.md",
"items": [ "./commands/create-spring-boot-java-project.md"
{
"path": "instructions/java.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/springboot.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/quarkus.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/quarkus-mcp-server-sse.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/convert-jpa-to-spring-data-cosmos.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/java-11-to-java-17-upgrade.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/java-17-to-java-21-upgrade.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/java-21-to-java-25-upgrade.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/java-docs.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/java-junit.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/java-springboot.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/create-spring-boot-java-project.prompt.md",
"kind": "prompt"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../prompts/create-spring-boot-java-project.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/java-docs.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/java-junit.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/java-springboot.prompt.md

View File

@@ -7,7 +7,7 @@
}, },
"repository": "https://github.com/github/awesome-copilot", "repository": "https://github.com/github/awesome-copilot",
"license": "MIT", "license": "MIT",
"tags": [ "keywords": [
"java", "java",
"mcp", "mcp",
"model-context-protocol", "model-context-protocol",
@@ -17,23 +17,10 @@
"spring-boot", "spring-boot",
"reactor" "reactor"
], ],
"display": { "agents": [
"ordering": "manual", "./agents/java-mcp-expert.md"
"show_badge": true ],
}, "commands": [
"items": [ "./commands/java-mcp-server-generator.md"
{
"path": "instructions/java-mcp-server.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/java-mcp-server-generator.prompt.md",
"kind": "prompt"
},
{
"path": "agents/java-mcp-expert.agent.md",
"kind": "agent",
"usage": "recommended\n\nThis chat mode provides expert guidance for building MCP servers in Java.\n\nThis chat mode is ideal for:\n- Creating new MCP server projects with Java\n- Implementing reactive handlers with Project Reactor\n- Setting up stdio or HTTP transports\n- Debugging reactive streams and error handling\n- Learning Java MCP best practices with the official SDK\n- Integrating with Spring Boot applications\n\nTo get the best results, consider:\n- Using the instruction file to set context for Java MCP development\n- Using the prompt to generate initial project structure\n- Switching to the expert chat mode for detailed implementation help\n- Specifying whether you need Maven or Gradle\n- Providing details about what tools or functionality you need\n- Mentioning if you need Spring Boot integration"
}
] ]
} }

View File

@@ -1 +0,0 @@
../../../agents/java-mcp-expert.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/java-mcp-server-generator.prompt.md

Some files were not shown because too many files have changed in this diff Show More