Preparing the repo for how the custom agents will work
This commit is contained in:
parent
3b8a56a83d
commit
3adf3dc1c6
@ -50,13 +50,13 @@
|
|||||||
"path": {
|
"path": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Relative path from repository root to the item file",
|
"description": "Relative path from repository root to the item file",
|
||||||
"pattern": "^(prompts|instructions|chatmodes)/[^/]+\\.(prompt|instructions|chatmode)\\.md$",
|
"pattern": "^(prompts|instructions|chatmodes|agents)/[^/]+\\.(prompt|instructions|chatmode|agent)\\.md$",
|
||||||
"minLength": 1
|
"minLength": 1
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Type of the item",
|
"description": "Type of the item",
|
||||||
"enum": ["prompt", "instruction", "chat-mode"]
|
"enum": ["prompt", "instruction", "chat-mode", "agent"]
|
||||||
},
|
},
|
||||||
"usage": {
|
"usage": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@ -82,9 +82,9 @@
|
|||||||
"description": "Whether to show collection badge on items",
|
"description": "Whether to show collection badge on items",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
"promoted": {
|
"featured": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"description": "Whether this collection is promoted on the main page",
|
"description": "Whether this collection is featured on the main page",
|
||||||
"default": false
|
"default": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
24
README.agents.md
Normal file
24
README.agents.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# 🤖 Custom Agents
|
||||||
|
|
||||||
|
Custom GitHub Copilot agents that integrate with MCP servers to provide enhanced capabilities for specific workflows and tools.
|
||||||
|
### How to Use Custom Agents
|
||||||
|
|
||||||
|
**To Install:**
|
||||||
|
- Click the **VS Code** or **VS Code Insiders** install button for the agent you want to use
|
||||||
|
- Download the `*.agent.md` file and manually add it to your repository
|
||||||
|
|
||||||
|
**MCP Server Setup:**
|
||||||
|
- Each agent may require one or more MCP servers to function
|
||||||
|
- Click the MCP server to view it on the GitHub MCP registry
|
||||||
|
- Agents will automatically install the MCP servers they need when activated
|
||||||
|
|
||||||
|
**To Activate/Use:**
|
||||||
|
- Access installed agents through the VS Code Chat interface, through Copilot CLI, or assign them in Coding Agent
|
||||||
|
- Agents will have access to tools from configured MCP servers
|
||||||
|
- Follow agent-specific instructions for optimal usage
|
||||||
|
|
||||||
|
| Title | Description | MCP Servers |
|
||||||
|
| ----- | ----------- | ----------- |
|
||||||
|
| [Amplitude Experiment Implementation](agents/amplitude-experiment-implementation.agent.md)<br />[](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Famplitude-experiment-implementation.agent.md)<br />[](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Famplitude-experiment-implementation.agent.md) | This custom agent uses Amplitude's MCP tools to deploy new experiments inside of Amplitude, enabling seamless variant testing capabilities and rollout of product features. | |
|
||||||
|
| [Launchdarkly Flag Cleanup](agents/launchdarkly-flag-cleanup.agent.md)<br />[](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md)<br />[](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md) | A specialized GitHub Copilot agent that uses the LaunchDarkly MCP server to safely automate feature flag cleanup workflows. This agent determines removal readiness, identifies the correct forward value, and creates PRs that preserve production behavior while removing obsolete flags and updating stale defaults. | [launchdarkly](https://github.com/mcp/launchdarkly/mcp-server)<br />[](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode:mcp/by-name/launchdarkly/mcp-server)<br />[](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode-insiders:mcp/by-name/launchdarkly/mcp-server)<br />[](https://aka.ms/awesome-copilot/install/mcp-visualstudio?vscode:mcp/by-name/launchdarkly/mcp-server) |
|
||||||
|
| [Stackhawk Security Onboarding](agents/stackhawk-security-onboarding.agent.md)<br />[](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fstackhawk-security-onboarding.agent.md)<br />[](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fstackhawk-security-onboarding.agent.md) | Automatically set up StackHawk security testing for your repository with generated configuration and GitHub Actions workflow | [stackhawk-mcp](https://github.com/mcp/stackhawk-mcp/mcp-server)<br />[](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode:mcp/by-name/stackhawk-mcp/mcp-server)<br />[](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode-insiders:mcp/by-name/stackhawk-mcp/mcp-server)<br />[](https://aka.ms/awesome-copilot/install/mcp-visualstudio?vscode:mcp/by-name/stackhawk-mcp/mcp-server) |
|
||||||
@ -35,7 +35,7 @@ Custom chat modes define specific behaviors and tools for GitHub Copilot Chat, e
|
|||||||
| [Create PRD Chat Mode](chatmodes/prd.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fprd.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fprd.chatmode.md) | Generate a comprehensive Product Requirements Document (PRD) in Markdown, detailing user stories, acceptance criteria, technical considerations, and metrics. Optionally create GitHub issues upon user confirmation. |
|
| [Create PRD Chat Mode](chatmodes/prd.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fprd.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fprd.chatmode.md) | Generate a comprehensive Product Requirements Document (PRD) in Markdown, detailing user stories, acceptance criteria, technical considerations, and metrics. Optionally create GitHub issues upon user confirmation. |
|
||||||
| [Critical thinking mode instructions](chatmodes/critical-thinking.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fcritical-thinking.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fcritical-thinking.chatmode.md) | Challenge assumptions and encourage critical thinking to ensure the best possible solution and outcomes. |
|
| [Critical thinking mode instructions](chatmodes/critical-thinking.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fcritical-thinking.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fcritical-thinking.chatmode.md) | Challenge assumptions and encourage critical thinking to ensure the best possible solution and outcomes. |
|
||||||
| [Debug Mode Instructions](chatmodes/debug.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdebug.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdebug.chatmode.md) | Debug your application to find and fix a bug |
|
| [Debug Mode Instructions](chatmodes/debug.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdebug.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdebug.chatmode.md) | Debug your application to find and fix a bug |
|
||||||
| [Declarative Agents Architect](chatmodes/declarative-agents-architect.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdeclarative-agents-architect.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdeclarative-agents-architect.chatmode.md) | | |
|
| [Declarative Agents Architect](chatmodes/declarative-agents-architect.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdeclarative-agents-architect.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdeclarative-agents-architect.chatmode.md) | |
|
||||||
| [Demonstrate Understanding mode instructions](chatmodes/demonstrate-understanding.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdemonstrate-understanding.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdemonstrate-understanding.chatmode.md) | Validate user understanding of code, design patterns, and implementation details through guided questioning. |
|
| [Demonstrate Understanding mode instructions](chatmodes/demonstrate-understanding.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdemonstrate-understanding.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdemonstrate-understanding.chatmode.md) | Validate user understanding of code, design patterns, and implementation details through guided questioning. |
|
||||||
| [Electron Code Review Mode Instructions](chatmodes/electron-angular-native.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Felectron-angular-native.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Felectron-angular-native.chatmode.md) | Code Review Mode tailored for Electron app with Node.js backend (main), Angular frontend (render), and native integration layer (e.g., AppleScript, shell, or native tooling). Services in other repos are not reviewed here. |
|
| [Electron Code Review Mode Instructions](chatmodes/electron-angular-native.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Felectron-angular-native.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Felectron-angular-native.chatmode.md) | Code Review Mode tailored for Electron app with Node.js backend (main), Angular frontend (render), and native integration layer (e.g., AppleScript, shell, or native tooling). Services in other repos are not reviewed here. |
|
||||||
| [Expert .NET software engineer mode instructions](chatmodes/expert-dotnet-software-engineer.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fexpert-dotnet-software-engineer.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fexpert-dotnet-software-engineer.chatmode.md) | Provide expert .NET software engineering guidance using modern software design patterns. |
|
| [Expert .NET software engineer mode instructions](chatmodes/expert-dotnet-software-engineer.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fexpert-dotnet-software-engineer.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fexpert-dotnet-software-engineer.chatmode.md) | Provide expert .NET software engineering guidance using modern software design patterns. |
|
||||||
|
|||||||
@ -16,7 +16,7 @@ Curated collections of related prompts, instructions, and chat modes organized a
|
|||||||
|
|
||||||
| Name | Description | Items | Tags |
|
| Name | Description | Items | Tags |
|
||||||
| ---- | ----------- | ----- | ---- |
|
| ---- | ----------- | ----- | ---- |
|
||||||
| [⭐ Partners](collections/partners.md) | Custom agents that have been created by GitHub partners | 10 items | tag1, tag2, tag3 |
|
| [⭐ Partners](collections/partners.md) | Custom agents that have been created by GitHub partners | 3 items | tag1, tag2, tag3 |
|
||||||
| [Azure & Cloud Development](collections/azure-cloud-development.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 |
|
| [Azure & Cloud Development](collections/azure-cloud-development.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 |
|
||||||
| [C# .NET Development](collections/csharp-dotnet-development.md) | Essential prompts, instructions, and chat modes for C# and .NET development including testing, documentation, and best practices. | 7 items | csharp, dotnet, aspnet, testing |
|
| [C# .NET Development](collections/csharp-dotnet-development.md) | Essential prompts, instructions, and chat modes for C# and .NET development including testing, documentation, and best practices. | 7 items | csharp, dotnet, aspnet, testing |
|
||||||
| [C# MCP Server Development](collections/csharp-mcp-development.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 |
|
| [C# MCP Server Development](collections/csharp-mcp-development.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 |
|
||||||
@ -26,18 +26,18 @@ Curated collections of related prompts, instructions, and chat modes organized a
|
|||||||
| [Frontend Web Development](collections/frontend-web-dev.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 |
|
| [Frontend Web Development](collections/frontend-web-dev.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 |
|
||||||
| [Go MCP Server Development](collections/go-mcp-development.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 Server Development](collections/go-mcp-development.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 |
|
||||||
| [Java Development](collections/java-development.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](collections/java-development.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 MCP Server Development](collections/java-mcp-development.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 Server Development](collections/java-mcp-development.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 |
|
||||||
| [Kotlin MCP Server Development](collections/kotlin-mcp-development.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 Server Development](collections/kotlin-mcp-development.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 |
|
||||||
| [PHP MCP Server Development](collections/php-mcp-development.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 |
|
| [PHP MCP Server Development](collections/php-mcp-development.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 |
|
||||||
| [Power Apps Code Apps Development](collections/power-apps-code-apps.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 |
|
| [Power Apps Code Apps Development](collections/power-apps-code-apps.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 |
|
||||||
| [Power BI Development](collections/power-bi-development.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 BI Development](collections/power-bi-development.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 Platform MCP Connector Development](collections/power-platform-mcp-connector-development.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 Platform MCP Connector Development](collections/power-platform-mcp-connector-development.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 |
|
||||||
| [Project Planning & Management](collections/project-planning.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 |
|
| [Project Planning & Management](collections/project-planning.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 |
|
||||||
| [Python MCP Server Development](collections/python-mcp-development.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 |
|
| [Python MCP Server Development](collections/python-mcp-development.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 |
|
||||||
| [Ruby MCP Server Development](collections/ruby-mcp-development.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 |
|
| [Ruby MCP Server Development](collections/ruby-mcp-development.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 |
|
||||||
| [Rust MCP Server Development](collections/rust-mcp-development.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 Server Development](collections/rust-mcp-development.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 |
|
||||||
| [Security & Code Quality](collections/security-best-practices.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 & Code Quality](collections/security-best-practices.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 |
|
||||||
| [Swift MCP Server Development](collections/swift-mcp-development.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 Server Development](collections/swift-mcp-development.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 |
|
||||||
| [Tasks by microsoft/edge-ai](collections/edge-ai-tasks.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 |
|
| [Tasks by microsoft/edge-ai](collections/edge-ai-tasks.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 |
|
||||||
| [Technical Spike](collections/technical-spike.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](collections/technical-spike.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 & Test Automation](collections/testing-automation.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 & Test Automation](collections/testing-automation.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 |
|
||||||
|
|||||||
@ -15,8 +15,8 @@ Team and project-specific instructions to enhance GitHub Copilot's behavior for
|
|||||||
| Title | Description |
|
| Title | Description |
|
||||||
| ----- | ----------- |
|
| ----- | ----------- |
|
||||||
| [.NET Framework Development](instructions/dotnet-framework.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-framework.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-framework.instructions.md) | Guidance for working with .NET Framework projects. Includes project structure, C# language version, NuGet management, and best practices. |
|
| [.NET Framework Development](instructions/dotnet-framework.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-framework.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-framework.instructions.md) | Guidance for working with .NET Framework projects. Includes project structure, C# language version, NuGet management, and best practices. |
|
||||||
|
| [.NET Framework Upgrade Specialist](instructions/dotnet-upgrade.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-upgrade.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-upgrade.instructions.md) | Specialized agent for comprehensive .NET framework upgrades with progressive tracking and validation |
|
||||||
| [.NET MAUI](instructions/dotnet-maui.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-maui.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-maui.instructions.md) | .NET MAUI component and application patterns |
|
| [.NET MAUI](instructions/dotnet-maui.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-maui.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-maui.instructions.md) | .NET MAUI component and application patterns |
|
||||||
| [.NET Project Upgrade Instructions](instructions/dotnet-upgrade.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-upgrade.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-upgrade.instructions.md) | Specialized agent for comprehensive .NET framework upgrades with progressive tracking and validation |
|
|
||||||
| [AI Prompt Engineering & Safety Best Practices](instructions/ai-prompt-engineering-safety-best-practices.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fai-prompt-engineering-safety-best-practices.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fai-prompt-engineering-safety-best-practices.instructions.md) | Comprehensive best practices for AI prompt engineering, safety frameworks, bias mitigation, and responsible AI usage for Copilot and LLMs. |
|
| [AI Prompt Engineering & Safety Best Practices](instructions/ai-prompt-engineering-safety-best-practices.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fai-prompt-engineering-safety-best-practices.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fai-prompt-engineering-safety-best-practices.instructions.md) | Comprehensive best practices for AI prompt engineering, safety frameworks, bias mitigation, and responsible AI usage for Copilot and LLMs. |
|
||||||
| [Angular Development Instructions](instructions/angular.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fangular.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fangular.instructions.md) | Angular-specific coding standards and best practices |
|
| [Angular Development Instructions](instructions/angular.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fangular.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fangular.instructions.md) | Angular-specific coding standards and best practices |
|
||||||
| [Ansible Conventions and Best Practices](instructions/ansible.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fansible.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fansible.instructions.md) | Ansible conventions and best practices |
|
| [Ansible Conventions and Best Practices](instructions/ansible.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fansible.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fansible.instructions.md) | Ansible conventions and best practices |
|
||||||
@ -40,7 +40,6 @@ Team and project-specific instructions to enhance GitHub Copilot's behavior for
|
|||||||
| [ColdFusion Coding Standards for CFC Files](instructions/coldfusion-cfc.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcoldfusion-cfc.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcoldfusion-cfc.instructions.md) | ColdFusion Coding Standards for CFC component and application patterns |
|
| [ColdFusion Coding Standards for CFC Files](instructions/coldfusion-cfc.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcoldfusion-cfc.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcoldfusion-cfc.instructions.md) | ColdFusion Coding Standards for CFC component and application patterns |
|
||||||
| [Collections Development](instructions/collections.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcollections.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcollections.instructions.md) | Guidelines for creating and managing awesome-copilot collections |
|
| [Collections Development](instructions/collections.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcollections.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcollections.instructions.md) | Guidelines for creating and managing awesome-copilot collections |
|
||||||
| [Containerization & Docker Best Practices](instructions/containerization-docker-best-practices.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcontainerization-docker-best-practices.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcontainerization-docker-best-practices.instructions.md) | Comprehensive best practices for creating optimized, secure, and efficient Docker images and managing containers. Covers multi-stage builds, image layer optimization, security scanning, and runtime best practices. |
|
| [Containerization & Docker Best Practices](instructions/containerization-docker-best-practices.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcontainerization-docker-best-practices.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcontainerization-docker-best-practices.instructions.md) | Comprehensive best practices for creating optimized, secure, and efficient Docker images and managing containers. Covers multi-stage builds, image layer optimization, security scanning, and runtime best practices. |
|
||||||
| [Conventional Commit](instructions/conventional-commit.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fconventional-commit.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fconventional-commit.prompt.md) | Prompt and workflow for generating conventional commit messages using a structured XML format. Guides users to create standardized, descriptive commit messages in line with the Conventional Commits specification, including instructions, examples, and validation. |
|
|
||||||
| [Convert Spring JPA project to Spring Data Cosmos](instructions/convert-jpa-to-spring-data-cosmos.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fconvert-jpa-to-spring-data-cosmos.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fconvert-jpa-to-spring-data-cosmos.instructions.md) | Step-by-step guide for converting Spring Boot JPA applications to use Azure Cosmos DB with Spring Data Cosmos |
|
| [Convert Spring JPA project to Spring Data Cosmos](instructions/convert-jpa-to-spring-data-cosmos.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fconvert-jpa-to-spring-data-cosmos.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fconvert-jpa-to-spring-data-cosmos.instructions.md) | Step-by-step guide for converting Spring Boot JPA applications to use Azure Cosmos DB with Spring Data Cosmos |
|
||||||
| [Copilot Process tracking Instructions](instructions/copilot-thought-logging.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcopilot-thought-logging.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcopilot-thought-logging.instructions.md) | See process Copilot is following where you can edit this to reshape the interaction or save when follow up may be needed |
|
| [Copilot Process tracking Instructions](instructions/copilot-thought-logging.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcopilot-thought-logging.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcopilot-thought-logging.instructions.md) | See process Copilot is following where you can edit this to reshape the interaction or save when follow up may be needed |
|
||||||
| [Copilot Prompt Files Guidelines](instructions/prompt.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fprompt.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fprompt.instructions.md) | Guidelines for creating high-quality prompt files for GitHub Copilot |
|
| [Copilot Prompt Files Guidelines](instructions/prompt.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fprompt.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fprompt.instructions.md) | Guidelines for creating high-quality prompt files for GitHub Copilot |
|
||||||
|
|||||||
@ -12,6 +12,7 @@ A curated collection of prompts, instructions, and chat modes to supercharge you
|
|||||||
This repository provides a comprehensive toolkit for enhancing GitHub Copilot with specialized:
|
This repository provides a comprehensive toolkit for enhancing GitHub Copilot with specialized:
|
||||||
|
|
||||||
- **[](README.prompts.md)** - Focused, task-specific prompts for generating code, documentation, and solving specific problems
|
- **[](README.prompts.md)** - Focused, task-specific prompts for generating code, documentation, and solving specific problems
|
||||||
|
- **[](README.agents.md)** - Specialized GitHub Copilot agents that integrate with MCP servers to provide enhanced capabilities for specific workflows and tools
|
||||||
- **[](README.instructions.md)** - Comprehensive coding standards and best practices that apply to specific file patterns or entire projects
|
- **[](README.instructions.md)** - Comprehensive coding standards and best practices that apply to specific file patterns or entire projects
|
||||||
- **[](README.chatmodes.md)** - Specialized AI personas and conversation modes for different roles and contexts
|
- **[](README.chatmodes.md)** - Specialized AI personas and conversation modes for different roles and contexts
|
||||||
- **[](README.collections.md)** - Curated collections of related prompts, instructions, and chat modes organized around specific themes and workflows
|
- **[](README.collections.md)** - Curated collections of related prompts, instructions, and chat modes organized around specific themes and workflows
|
||||||
@ -22,7 +23,7 @@ Discover our curated collections of prompts, instructions, and chat modes organi
|
|||||||
|
|
||||||
| Name | Description | Items | Tags |
|
| Name | Description | Items | Tags |
|
||||||
| ---- | ----------- | ----- | ---- |
|
| ---- | ----------- | ----- | ---- |
|
||||||
| [Partners](collections/partners.md) | Custom agents that have been created by GitHub partners | 10 items | tag1, tag2, tag3 |
|
| [Partners](collections/partners.md) | Custom agents that have been created by GitHub partners | 3 items | tag1, tag2, tag3 |
|
||||||
|
|
||||||
|
|
||||||
## MCP Server
|
## MCP Server
|
||||||
|
|||||||
@ -101,7 +101,7 @@ Ready-to-use prompt templates for specific development scenarios and tasks, defi
|
|||||||
| [Repo Story Time](prompts/repo-story-time.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frepo-story-time.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frepo-story-time.prompt.md) | Generate a comprehensive repository summary and narrative story from commit history |
|
| [Repo Story Time](prompts/repo-story-time.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frepo-story-time.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frepo-story-time.prompt.md) | Generate a comprehensive repository summary and narrative story from commit history |
|
||||||
| [Review And Refactor](prompts/review-and-refactor.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Freview-and-refactor.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Freview-and-refactor.prompt.md) | Review and refactor code in your project according to defined instructions |
|
| [Review And Refactor](prompts/review-and-refactor.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Freview-and-refactor.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Freview-and-refactor.prompt.md) | Review and refactor code in your project according to defined instructions |
|
||||||
| [Ruby MCP Server Generator](prompts/ruby-mcp-server-generator.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fruby-mcp-server-generator.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fruby-mcp-server-generator.prompt.md) | Generate a complete Model Context Protocol server project in Ruby using the official MCP Ruby SDK gem. |
|
| [Ruby MCP Server Generator](prompts/ruby-mcp-server-generator.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fruby-mcp-server-generator.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fruby-mcp-server-generator.prompt.md) | Generate a complete Model Context Protocol server project in Ruby using the official MCP Ruby SDK gem. |
|
||||||
| [Rust MCP Server Generator](prompts/rust-mcp-server-generator.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md) | Generate a complete Rust Model Context Protocol server project with tools, prompts, resources, and tests using the official rmcp SDK |
|
| [Rust Mcp Server Generator](prompts/rust-mcp-server-generator.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md) | Generate a complete Rust Model Context Protocol server project with tools, prompts, resources, and tests using the official rmcp SDK |
|
||||||
| [Shuffle JSON Data](prompts/shuffle-json-data.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fshuffle-json-data.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fshuffle-json-data.prompt.md) | Shuffle repetitive JSON objects safely by validating schema consistency before randomising entries. |
|
| [Shuffle JSON Data](prompts/shuffle-json-data.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fshuffle-json-data.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fshuffle-json-data.prompt.md) | Shuffle repetitive JSON objects safely by validating schema consistency before randomising entries. |
|
||||||
| [Spring Boot Best Practices](prompts/java-springboot.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-springboot.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-springboot.prompt.md) | Get best practices for developing applications with Spring Boot. |
|
| [Spring Boot Best Practices](prompts/java-springboot.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-springboot.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-springboot.prompt.md) | Get best practices for developing applications with Spring Boot. |
|
||||||
| [Spring Boot with Kotlin Best Practices](prompts/kotlin-springboot.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fkotlin-springboot.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fkotlin-springboot.prompt.md) | Get best practices for developing applications with Spring Boot and Kotlin. |
|
| [Spring Boot with Kotlin Best Practices](prompts/kotlin-springboot.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fkotlin-springboot.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fkotlin-springboot.prompt.md) | Get best practices for developing applications with Spring Boot and Kotlin. |
|
||||||
|
|||||||
34
agents/amplitude-experiment-implementation.agent.md
Normal file
34
agents/amplitude-experiment-implementation.agent.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
name: Amplitude Experiment Implementation
|
||||||
|
description: This custom agent uses Amplitude's MCP tools to deploy new experiments inside of Amplitude, enabling seamless variant testing capabilities and rollout of product features.
|
||||||
|
---
|
||||||
|
|
||||||
|
### Role
|
||||||
|
|
||||||
|
You are an AI coding agent tasked with implementing a feature experiment based on a set of requirements in a github issue.
|
||||||
|
|
||||||
|
### Instructions
|
||||||
|
|
||||||
|
1. Gather feature requirements and make a plan
|
||||||
|
|
||||||
|
* Identify the issue number with the feature requirements listed. If the user does not provide one, ask the user to provide one and HALT.
|
||||||
|
* Read through the feature requirements from the issue. Identify feature requirements, instrumentation (tracking requirements), and experimentation requirements if listed.
|
||||||
|
* Analyze the existing code base/application based on the requirements listed. Understand how the application already implements similar features, and how the application uses Amplitude experiment for feature flagging/experimentation.
|
||||||
|
* Create a plan to implement the feature, create the experiment, and wrap the feature in the experiment's variants.
|
||||||
|
|
||||||
|
2. Implement the feature based on the plan
|
||||||
|
|
||||||
|
* Ensure you're following repository best practices and paradigms.
|
||||||
|
|
||||||
|
3. Create an experiment using Amplitude MCP.
|
||||||
|
|
||||||
|
* Ensure you follow the tool directions and schema.
|
||||||
|
* Create the experiment using the create_experiment Amplitude MCP tool.
|
||||||
|
* Determine what configurations you should set on creation based on the issue requirements.
|
||||||
|
|
||||||
|
4. Wrap the new feature you just implemented in the new experiment.
|
||||||
|
|
||||||
|
* Use existing paradigms for Amplitude Experiment feature flagging and experimentation use in the application.
|
||||||
|
* Ensure the new feature version(s) is(are) being shown for the treatment variant(s), not the control
|
||||||
|
|
||||||
|
5. Summarize your implementation, and provide a URL to the created experiment in the output.
|
||||||
@ -8,62 +8,12 @@ Task Researcher and Task Planner for intermediate to expert users and large code
|
|||||||
|
|
||||||
| Title | Type | Description |
|
| Title | Type | Description |
|
||||||
| ----- | ---- | ----------- |
|
| ----- | ---- | ----------- |
|
||||||
| [Task Researcher Instructions](../chatmodes/task-researcher.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-researcher.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-researcher.chatmode.md) | Chat Mode | Task research specialist for comprehensive project analysis - Brought to you by microsoft/edge-ai [see usage](#task-researcher-instructions) |
|
|
||||||
| [Task Planner Instructions](../chatmodes/task-planner.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-planner.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-planner.chatmode.md) | Chat Mode | Task planner for creating actionable implementation plans - Brought to you by microsoft/edge-ai [see usage](#task-planner-instructions) |
|
|
||||||
| [Task Plan Implementation Instructions](../instructions/task-implementation.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Ftask-implementation.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Ftask-implementation.instructions.md) | Instruction | Instructions for implementing task plans with progressive tracking and change record - Brought to you by microsoft/edge-ai [see usage](#task-plan-implementation-instructions) |
|
| [Task Plan Implementation Instructions](../instructions/task-implementation.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Ftask-implementation.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Ftask-implementation.instructions.md) | Instruction | Instructions for implementing task plans with progressive tracking and change record - Brought to you by microsoft/edge-ai [see usage](#task-plan-implementation-instructions) |
|
||||||
|
| [Task Planner Instructions](../chatmodes/task-planner.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-planner.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-planner.chatmode.md) | Chat Mode | Task planner for creating actionable implementation plans - Brought to you by microsoft/edge-ai [see usage](#task-planner-instructions) |
|
||||||
|
| [Task Researcher Instructions](../chatmodes/task-researcher.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-researcher.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-researcher.chatmode.md) | Chat Mode | Task research specialist for comprehensive project analysis - Brought to you by microsoft/edge-ai [see usage](#task-researcher-instructions) |
|
||||||
|
|
||||||
## Collection Usage
|
## Collection Usage
|
||||||
|
|
||||||
### Task Researcher Instructions
|
|
||||||
|
|
||||||
Now you can iterate on research for your tasks!
|
|
||||||
|
|
||||||
```markdown, research.prompt.md
|
|
||||||
---
|
|
||||||
mode: task-researcher
|
|
||||||
title: Research microsoft fabric realtime intelligence terraform support
|
|
||||||
---
|
|
||||||
Review the microsoft documentation for fabric realtime intelligence
|
|
||||||
and come up with ideas on how to implement this support into our terraform components.
|
|
||||||
```
|
|
||||||
|
|
||||||
Research 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.
|
|
||||||
|
|
||||||
Also, task-researcher will provide additional ideas for implementation which you can work with GitHub Copilot on selecting the right one to focus on.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Task Planner Instructions
|
|
||||||
|
|
||||||
Also, task-researcher will provide additional ideas for implementation which you can work with GitHub Copilot on selecting the right one to focus on.
|
|
||||||
|
|
||||||
```markdown, task-plan.prompt.md
|
|
||||||
---
|
|
||||||
mode: task-planner
|
|
||||||
title: Plan microsoft fabric realtime intelligence terraform support
|
|
||||||
---
|
|
||||||
#file: .copilot-tracking/research/*-fabric-rti-blueprint-modification-research.md
|
|
||||||
Build a plan to support adding fabric rti to this project
|
|
||||||
```
|
|
||||||
|
|
||||||
`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.
|
|
||||||
|
|
||||||
`task-planner` will produce three (3) files that will be used by `task-implementation.instructions.md`.
|
|
||||||
|
|
||||||
* `.copilot-tracking/plan/*-plan.instructions.md`
|
|
||||||
|
|
||||||
* A newly generated instructions file that has the plan as a checklist of Phases and Tasks.
|
|
||||||
* `.copilot-tracking/details/*-details.md`
|
|
||||||
|
|
||||||
* The details for the implementation, the plan file refers to this file for specific details (important if you have a big plan).
|
|
||||||
* `.copilot-tracking/prompts/implement-*.prompt.md`
|
|
||||||
|
|
||||||
* A newly generated prompt file that will create a `.copilot-tracking/changes/*-changes.md` file and proceed to implement the changes.
|
|
||||||
|
|
||||||
Continue to use `task-planner` to iterate on the plan until you have exactly what you want done to your codebase.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Task Plan Implementation Instructions
|
### Task Plan Implementation Instructions
|
||||||
|
|
||||||
Continue to use `task-planner` to iterate on the plan until you have exactly what you want done to your codebase.
|
Continue to use `task-planner` to iterate on the plan until you have exactly what you want done to your codebase.
|
||||||
@ -97,4 +47,53 @@ To use these generated instructions and prompts, you'll need to update your `set
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*This collection includes 3 curated items for **Tasks by microsoft/edge-ai**.*
|
### Task Planner Instructions
|
||||||
|
|
||||||
|
Also, task-researcher will provide additional ideas for implementation which you can work with GitHub Copilot on selecting the right one to focus on.
|
||||||
|
|
||||||
|
```markdown, task-plan.prompt.md
|
||||||
|
---
|
||||||
|
mode: task-planner
|
||||||
|
title: Plan microsoft fabric realtime intelligence terraform support
|
||||||
|
---
|
||||||
|
#file: .copilot-tracking/research/*-fabric-rti-blueprint-modification-research.md
|
||||||
|
Build a plan to support adding fabric rti to this project
|
||||||
|
```
|
||||||
|
|
||||||
|
`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.
|
||||||
|
|
||||||
|
`task-planner` will produce three (3) files that will be used by `task-implementation.instructions.md`.
|
||||||
|
|
||||||
|
* `.copilot-tracking/plan/*-plan.instructions.md`
|
||||||
|
|
||||||
|
* A newly generated instructions file that has the plan as a checklist of Phases and Tasks.
|
||||||
|
* `.copilot-tracking/details/*-details.md`
|
||||||
|
|
||||||
|
* The details for the implementation, the plan file refers to this file for specific details (important if you have a big plan).
|
||||||
|
* `.copilot-tracking/prompts/implement-*.prompt.md`
|
||||||
|
|
||||||
|
* A newly generated prompt file that will create a `.copilot-tracking/changes/*-changes.md` file and proceed to implement the changes.
|
||||||
|
|
||||||
|
Continue to use `task-planner` to iterate on the plan until you have exactly what you want done to your codebase.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Task Researcher Instructions
|
||||||
|
|
||||||
|
Now you can iterate on research for your tasks!
|
||||||
|
|
||||||
|
```markdown, research.prompt.md
|
||||||
|
---
|
||||||
|
mode: task-researcher
|
||||||
|
title: Research microsoft fabric realtime intelligence terraform support
|
||||||
|
---
|
||||||
|
Review the microsoft documentation for fabric realtime intelligence
|
||||||
|
and come up with ideas on how to implement this support into our terraform components.
|
||||||
|
```
|
||||||
|
|
||||||
|
Research 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.
|
||||||
|
|
||||||
|
Also, task-researcher will provide additional ideas for implementation which you can work with GitHub Copilot on selecting the right one to focus on.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# Java MCP Server Development
|
# Java MCP Server Development
|
||||||
|
|
||||||
'Complete toolkit for building Model Context Protocol servers in Java using the official MCP Java SDK with reactive streams and Spring Boot integration.'
|
Complete toolkit for building Model Context Protocol servers in Java using the official MCP Java SDK with reactive streams and Spring Boot integration.
|
||||||
|
|
||||||
**Tags:** java, mcp, model-context-protocol, server-development, sdk, reactive-streams, spring-boot, reactor
|
**Tags:** java, mcp, model-context-protocol, server-development, sdk, reactive-streams, spring-boot, reactor
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,9 @@ items:
|
|||||||
kind: agent
|
kind: agent
|
||||||
- path: agents/stackhawk-security-onboarding.agent.md
|
- path: agents/stackhawk-security-onboarding.agent.md
|
||||||
kind: agent
|
kind: agent
|
||||||
|
- path: agents/amplitude-experiment-implementation.agent.md
|
||||||
|
kind: agent
|
||||||
display:
|
display:
|
||||||
ordering: alpha
|
ordering: alpha
|
||||||
show_badge: true
|
show_badge: true
|
||||||
promoted: true
|
featured: true
|
||||||
|
|||||||
@ -6,18 +6,11 @@ Custom agents that have been created by GitHub partners
|
|||||||
|
|
||||||
## Items in this Collection
|
## Items in this Collection
|
||||||
|
|
||||||
| Title | Type | Description |
|
| Title | Type | Description | MCP Servers |
|
||||||
| ----- | ---- | ----------- |
|
| ----- | ---- | ----------- | ----------- |
|
||||||
| [API Architect mode instructions](../chatmodes/api-architect.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fapi-architect.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fapi-architect.chatmode.md) | Chat Mode | Your role is that of an API architect. Help mentor the engineer by providing guidance, support, and working code. |
|
| [Amplitude Experiment Implementation](../agents/amplitude-experiment-implementation.agent.md)<br />[](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Famplitude-experiment-implementation.agent.md)<br />[](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Famplitude-experiment-implementation.agent.md) | Agent | This custom agent uses Amplitude's MCP tools to deploy new experiments inside of Amplitude, enabling seamless variant testing capabilities and rollout of product features. | |
|
||||||
| [Azure Logic Apps Expert Mode](../chatmodes/azure-logic-apps-expert.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fazure-logic-apps-expert.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fazure-logic-apps-expert.chatmode.md) | Chat Mode | Expert guidance for Azure Logic Apps development focusing on workflow design, integration patterns, and JSON-based Workflow Definition Language. |
|
| [Launchdarkly Flag Cleanup](../agents/launchdarkly-flag-cleanup.agent.md)<br />[](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md)<br />[](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md) | Agent | A specialized GitHub Copilot agent that uses the LaunchDarkly MCP server to safely automate feature flag cleanup workflows. This agent determines removal readiness, identifies the correct forward value, and creates PRs that preserve production behavior while removing obsolete flags and updating stale defaults. | [launchdarkly](https://github.com/mcp/launchdarkly/mcp-server)<br />[](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode:mcp/by-name/launchdarkly/mcp-server)<br />[](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode-insiders:mcp/by-name/launchdarkly/mcp-server)<br />[](https://aka.ms/awesome-copilot/install/mcp-visualstudio?vscode:mcp/by-name/launchdarkly/mcp-server) |
|
||||||
| [Blueprint Mode Codex v1](../chatmodes/blueprint-mode-codex.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fblueprint-mode-codex.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fblueprint-mode-codex.chatmode.md) | Chat Mode | Executes structured workflows with strict correctness and maintainability. Enforces a minimal tool usage policy, never assumes facts, prioritizes reproducible solutions, self-correction, and edge-case handling. |
|
| [Stackhawk Security Onboarding](../agents/stackhawk-security-onboarding.agent.md)<br />[](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fstackhawk-security-onboarding.agent.md)<br />[](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fstackhawk-security-onboarding.agent.md) | Agent | Automatically set up StackHawk security testing for your repository with generated configuration and GitHub Actions workflow | [stackhawk-mcp](https://github.com/mcp/stackhawk-mcp/mcp-server)<br />[](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode:mcp/by-name/stackhawk-mcp/mcp-server)<br />[](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode-insiders:mcp/by-name/stackhawk-mcp/mcp-server)<br />[](https://aka.ms/awesome-copilot/install/mcp-visualstudio?vscode:mcp/by-name/stackhawk-mcp/mcp-server) |
|
||||||
| [Clojure Interactive Programming with Backseat Driver](../chatmodes/clojure-interactive-programming.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fclojure-interactive-programming.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fclojure-interactive-programming.chatmode.md) | Chat Mode | Expert Clojure pair programmer with REPL-first methodology, architectural oversight, and interactive problem-solving. Enforces quality standards, prevents workarounds, and develops solutions incrementally through live REPL evaluation before file modifications. |
|
|
||||||
| [Expert C++ software engineer mode instructions](../chatmodes/expert-cpp-software-engineer.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fexpert-cpp-software-engineer.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fexpert-cpp-software-engineer.chatmode.md) | Chat Mode | Provide expert C++ software engineering guidance using modern C++ and industry best practices. |
|
|
||||||
| [Gilfoyle Code Review Mode](../chatmodes/gilfoyle.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fgilfoyle.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fgilfoyle.chatmode.md) | Chat Mode | Code review and analysis with the sardonic wit and technical elitism of Bertram Gilfoyle from Silicon Valley. Prepare for brutal honesty about your code. |
|
|
||||||
| [Java MCP Expert](../chatmodes/java-mcp-expert.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fjava-mcp-expert.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fjava-mcp-expert.chatmode.md) | Chat Mode | Expert assistance for building Model Context Protocol servers in Java using reactive streams, the official MCP Java SDK, and Spring Boot integration. |
|
|
||||||
| [Meta Agentic Project Scaffold](../chatmodes/meta-agentic-project-scaffold.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fmeta-agentic-project-scaffold.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fmeta-agentic-project-scaffold.chatmode.md) | Chat Mode | Meta agentic project creation assistant to help users create and manage project workflows effectively. |
|
|
||||||
| [Power Platform Expert](../chatmodes/power-platform-expert.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fpower-platform-expert.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fpower-platform-expert.chatmode.md) | Chat Mode | Power Platform expert providing guidance on Code Apps, canvas apps, Dataverse, connectors, and Power Platform best practices |
|
|
||||||
| [Ruby MCP Expert](../chatmodes/ruby-mcp-expert.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fruby-mcp-expert.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fruby-mcp-expert.chatmode.md) | Chat Mode | Expert assistance for building Model Context Protocol servers in Ruby using the official MCP Ruby SDK gem with Rails integration. |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
*This collection includes 10 curated items for **Partners**.*
|
*This collection includes 3 curated items for **Partners**.*
|
||||||
@ -1,6 +1,6 @@
|
|||||||
# PHP MCP Server Development
|
# PHP MCP Server Development
|
||||||
|
|
||||||
'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'
|
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
|
||||||
|
|
||||||
**Tags:** php, mcp, model-context-protocol, server-development, sdk, attributes, composer
|
**Tags:** php, mcp, model-context-protocol, server-development, sdk, attributes, composer
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# Ruby MCP Server Development
|
# Ruby MCP Server Development
|
||||||
|
|
||||||
'Complete toolkit for building Model Context Protocol servers in Ruby using the official MCP Ruby SDK gem with Rails integration support.'
|
Complete toolkit for building Model Context Protocol servers in Ruby using the official MCP Ruby SDK gem with Rails integration support.
|
||||||
|
|
||||||
**Tags:** ruby, mcp, model-context-protocol, server-development, sdk, rails, gem
|
**Tags:** ruby, mcp, model-context-protocol, server-development, sdk, rails, gem
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@ Build high-performance Model Context Protocol servers in Rust using the official
|
|||||||
| Title | Type | Description |
|
| Title | Type | Description |
|
||||||
| ----- | ---- | ----------- |
|
| ----- | ---- | ----------- |
|
||||||
| [Rust MCP Server Development Best Practices](../instructions/rust-mcp-server.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Frust-mcp-server.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Frust-mcp-server.instructions.md) | Instruction | Best practices for building Model Context Protocol servers in Rust using the official rmcp SDK with async/await patterns |
|
| [Rust MCP Server Development Best Practices](../instructions/rust-mcp-server.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Frust-mcp-server.instructions.md)<br />[](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Frust-mcp-server.instructions.md) | Instruction | Best practices for building Model Context Protocol servers in Rust using the official rmcp SDK with async/await patterns |
|
||||||
| [Rust MCP Server Generator](../prompts/rust-mcp-server-generator.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md) | Prompt | Generate a complete Rust Model Context Protocol server project with tools, prompts, resources, and tests using the official rmcp SDK |
|
| [Rust Mcp Server Generator](../prompts/rust-mcp-server-generator.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md) | Prompt | Generate a complete Rust Model Context Protocol server project with tools, prompts, resources, and tests using the official rmcp SDK |
|
||||||
| [Rust MCP Expert](../chatmodes/rust-mcp-expert.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Frust-mcp-expert.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Frust-mcp-expert.chatmode.md) | Chat Mode | Expert assistant for Rust MCP server development using the rmcp SDK with tokio async runtime [see usage](#rust-mcp-expert) |
|
| [Rust MCP Expert](../chatmodes/rust-mcp-expert.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Frust-mcp-expert.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Frust-mcp-expert.chatmode.md) | Chat Mode | Expert assistant for Rust MCP server development using the rmcp SDK with tokio async runtime [see usage](#rust-mcp-expert) |
|
||||||
|
|
||||||
## Collection Usage
|
## Collection Usage
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# Swift MCP Server Development
|
# Swift MCP Server Development
|
||||||
|
|
||||||
'Comprehensive collection for building Model Context Protocol servers in Swift using the official MCP Swift SDK with modern concurrency features.'
|
Comprehensive collection for building Model Context Protocol servers in Swift using the official MCP Swift SDK with modern concurrency features.
|
||||||
|
|
||||||
**Tags:** swift, mcp, model-context-protocol, server-development, sdk, ios, macos, concurrency, actor, async-await
|
**Tags:** swift, mcp, model-context-protocol, server-development, sdk, ios, macos, concurrency, actor, async-await
|
||||||
|
|
||||||
|
|||||||
@ -8,8 +8,5 @@ Tools for creation, management and research of technical spikes to reduce unknow
|
|||||||
|
|
||||||
| Title | Type | Description |
|
| Title | Type | Description |
|
||||||
| ----- | ---- | ----------- |
|
| ----- | ---- | ----------- |
|
||||||
| [Technical spike research mode](../chatmodes/research-technical-spike.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fresearch-technical-spike.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fresearch-technical-spike.chatmode.md) | Chat Mode | Systematically research and validate technical spike documents through exhaustive investigation and controlled experimentation. |
|
|
||||||
| [Create Technical Spike Document](../prompts/create-technical-spike.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcreate-technical-spike.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcreate-technical-spike.prompt.md) | Prompt | Create time-boxed technical spike documents for researching and resolving critical development decisions before implementation. |
|
| [Create Technical Spike Document](../prompts/create-technical-spike.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcreate-technical-spike.prompt.md)<br />[](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcreate-technical-spike.prompt.md) | Prompt | Create time-boxed technical spike documents for researching and resolving critical development decisions before implementation. |
|
||||||
|
| [Technical spike research mode](../chatmodes/research-technical-spike.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fresearch-technical-spike.chatmode.md)<br />[](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fresearch-technical-spike.chatmode.md) | Chat Mode | Systematically research and validate technical spike documents through exhaustive investigation and controlled experimentation. |
|
||||||
---
|
|
||||||
*This collection includes 2 curated items for **Technical Spike**.*
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ const readline = require("readline");
|
|||||||
|
|
||||||
const rl = readline.createInterface({
|
const rl = readline.createInterface({
|
||||||
input: process.stdin,
|
input: process.stdin,
|
||||||
output: process.stdout
|
output: process.stdout,
|
||||||
});
|
});
|
||||||
|
|
||||||
function prompt(question) {
|
function prompt(question) {
|
||||||
@ -22,20 +22,20 @@ function parseArgs() {
|
|||||||
// simple long/short option parsing
|
// simple long/short option parsing
|
||||||
for (let i = 0; i < args.length; i++) {
|
for (let i = 0; i < args.length; i++) {
|
||||||
const a = args[i];
|
const a = args[i];
|
||||||
if (a === '--id' || a === '-i') {
|
if (a === "--id" || a === "-i") {
|
||||||
out.id = args[i + 1];
|
out.id = args[i + 1];
|
||||||
i++;
|
i++;
|
||||||
} else if (a.startsWith('--id=')) {
|
} else if (a.startsWith("--id=")) {
|
||||||
out.id = a.split('=')[1];
|
out.id = a.split("=")[1];
|
||||||
} else if (a === '--tags' || a === '-t') {
|
} else if (a === "--tags" || a === "-t") {
|
||||||
out.tags = args[i + 1];
|
out.tags = args[i + 1];
|
||||||
i++;
|
i++;
|
||||||
} else if (a.startsWith('--tags=')) {
|
} else if (a.startsWith("--tags=")) {
|
||||||
out.tags = a.split('=')[1];
|
out.tags = a.split("=")[1];
|
||||||
} else if (!a.startsWith('-') && !out.id) {
|
} else if (!a.startsWith("-") && !out.id) {
|
||||||
// first positional -> id
|
// first positional -> id
|
||||||
out.id = a;
|
out.id = a;
|
||||||
} else if (!a.startsWith('-') && out.id && !out.tags) {
|
} else if (!a.startsWith("-") && out.id && !out.tags) {
|
||||||
// second positional -> tags
|
// second positional -> tags
|
||||||
out.tags = a;
|
out.tags = a;
|
||||||
}
|
}
|
||||||
@ -43,7 +43,7 @@ function parseArgs() {
|
|||||||
|
|
||||||
// normalize tags to string (comma separated) or undefined
|
// normalize tags to string (comma separated) or undefined
|
||||||
if (Array.isArray(out.tags)) {
|
if (Array.isArray(out.tags)) {
|
||||||
out.tags = out.tags.join(',');
|
out.tags = out.tags.join(",");
|
||||||
}
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
@ -69,16 +69,23 @@ async function createCollectionTemplate() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!/^[a-z0-9-]+$/.test(collectionId)) {
|
if (!/^[a-z0-9-]+$/.test(collectionId)) {
|
||||||
console.error("❌ Collection ID must contain only lowercase letters, numbers, and hyphens");
|
console.error(
|
||||||
|
"❌ Collection ID must contain only lowercase letters, numbers, and hyphens"
|
||||||
|
);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const collectionsDir = path.join(__dirname, "collections");
|
const collectionsDir = path.join(__dirname, "collections");
|
||||||
const filePath = path.join(collectionsDir, `${collectionId}.collection.yml`);
|
const filePath = path.join(
|
||||||
|
collectionsDir,
|
||||||
|
`${collectionId}.collection.yml`
|
||||||
|
);
|
||||||
|
|
||||||
// Check if file already exists
|
// Check if file already exists
|
||||||
if (fs.existsSync(filePath)) {
|
if (fs.existsSync(filePath)) {
|
||||||
console.log(`⚠️ Collection ${collectionId} already exists at ${filePath}`);
|
console.log(
|
||||||
|
`⚠️ Collection ${collectionId} already exists at ${filePath}`
|
||||||
|
);
|
||||||
console.log("💡 Please edit that file instead or choose a different ID.");
|
console.log("💡 Please edit that file instead or choose a different ID.");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
@ -91,17 +98,21 @@ async function createCollectionTemplate() {
|
|||||||
// Get collection name
|
// Get collection name
|
||||||
const defaultName = collectionId
|
const defaultName = collectionId
|
||||||
.split("-")
|
.split("-")
|
||||||
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
||||||
.join(" ");
|
.join(" ");
|
||||||
|
|
||||||
let collectionName = await prompt(`Collection name (default: ${defaultName}): `);
|
let collectionName = await prompt(
|
||||||
|
`Collection name (default: ${defaultName}): `
|
||||||
|
);
|
||||||
if (!collectionName.trim()) {
|
if (!collectionName.trim()) {
|
||||||
collectionName = defaultName;
|
collectionName = defaultName;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get description
|
// Get description
|
||||||
const defaultDescription = `A collection of related prompts, instructions, and chat modes for ${collectionName.toLowerCase()}.`;
|
const defaultDescription = `A collection of related prompts, instructions, and chat modes for ${collectionName.toLowerCase()}.`;
|
||||||
let description = await prompt(`Description (default: ${defaultDescription}): `);
|
let description = await prompt(
|
||||||
|
`Description (default: ${defaultDescription}): `
|
||||||
|
);
|
||||||
if (!description.trim()) {
|
if (!description.trim()) {
|
||||||
description = defaultDescription;
|
description = defaultDescription;
|
||||||
}
|
}
|
||||||
@ -110,11 +121,17 @@ async function createCollectionTemplate() {
|
|||||||
let tags = [];
|
let tags = [];
|
||||||
let tagInput = parsed.tags;
|
let tagInput = parsed.tags;
|
||||||
if (!tagInput) {
|
if (!tagInput) {
|
||||||
tagInput = await prompt("Tags (comma-separated, or press Enter for defaults): ");
|
tagInput = await prompt(
|
||||||
|
"Tags (comma-separated, or press Enter for defaults): "
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tagInput && tagInput.toString().trim()) {
|
if (tagInput && tagInput.toString().trim()) {
|
||||||
tags = tagInput.toString().split(",").map(tag => tag.trim()).filter(tag => tag);
|
tags = tagInput
|
||||||
|
.toString()
|
||||||
|
.split(",")
|
||||||
|
.map((tag) => tag.trim())
|
||||||
|
.filter((tag) => tag);
|
||||||
} else {
|
} else {
|
||||||
// Generate some default tags from the collection ID
|
// Generate some default tags from the collection ID
|
||||||
tags = collectionId.split("-").slice(0, 3);
|
tags = collectionId.split("-").slice(0, 3);
|
||||||
@ -134,6 +151,11 @@ items:
|
|||||||
# kind: instruction
|
# kind: instruction
|
||||||
# - path: chatmodes/example.chatmode.md
|
# - path: chatmodes/example.chatmode.md
|
||||||
# kind: chat-mode
|
# kind: chat-mode
|
||||||
|
# - path: agents/example.agent.md
|
||||||
|
# kind: agent
|
||||||
|
# usage: |
|
||||||
|
# This agent requires the example MCP server to be installed.
|
||||||
|
# Configure any required environment variables (e.g., EXAMPLE_API_KEY).
|
||||||
display:
|
display:
|
||||||
ordering: alpha # or "manual" to preserve the order above
|
ordering: alpha # or "manual" to preserve the order above
|
||||||
show_badge: false # set to true to show collection badge on items
|
show_badge: false # set to true to show collection badge on items
|
||||||
@ -148,7 +170,6 @@ display:
|
|||||||
console.log("4. Run 'node update-readme.js' to generate documentation");
|
console.log("4. Run 'node update-readme.js' to generate documentation");
|
||||||
console.log("\n📄 Collection template contents:");
|
console.log("\n📄 Collection template contents:");
|
||||||
console.log(template);
|
console.log(template);
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`❌ Error creating collection template: ${error.message}`);
|
console.error(`❌ Error creating collection template: ${error.message}`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
|
|||||||
21
package-lock.json
generated
21
package-lock.json
generated
@ -8,6 +8,9 @@
|
|||||||
"name": "awesome-copilot",
|
"name": "awesome-copilot",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"js-yaml": "^4.1.0"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"all-contributors-cli": "^6.26.1"
|
"all-contributors-cli": "^6.26.1"
|
||||||
}
|
}
|
||||||
@ -92,6 +95,12 @@
|
|||||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/argparse": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
|
||||||
|
"license": "Python-2.0"
|
||||||
|
},
|
||||||
"node_modules/async": {
|
"node_modules/async": {
|
||||||
"version": "3.2.6",
|
"version": "3.2.6",
|
||||||
"resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
|
"resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
|
||||||
@ -335,6 +344,18 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/js-yaml": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"argparse": "^2.0.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"js-yaml": "bin/js-yaml.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/json-fixer": {
|
"node_modules/json-fixer": {
|
||||||
"version": "1.6.15",
|
"version": "1.6.15",
|
||||||
"resolved": "https://registry.npmjs.org/json-fixer/-/json-fixer-1.6.15.tgz",
|
"resolved": "https://registry.npmjs.org/json-fixer/-/json-fixer-1.6.15.tgz",
|
||||||
|
|||||||
@ -3,7 +3,9 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "Enhance your GitHub Copilot experience with community-contributed instructions, prompts, and chat modes",
|
"description": "Enhance your GitHub Copilot experience with community-contributed instructions, prompts, and chat modes",
|
||||||
"main": "update-readme.js",
|
"main": "update-readme.js",
|
||||||
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"start": "node run build",
|
||||||
"build": "node update-readme.js",
|
"build": "node update-readme.js",
|
||||||
"contributors:add": "all-contributors add",
|
"contributors:add": "all-contributors add",
|
||||||
"contributors:generate": "all-contributors generate",
|
"contributors:generate": "all-contributors generate",
|
||||||
@ -24,5 +26,8 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"all-contributors-cli": "^6.26.1"
|
"all-contributors-cli": "^6.26.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"js-yaml": "^4.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
353
update-readme.js
353
update-readme.js
@ -2,7 +2,11 @@
|
|||||||
|
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const { parseCollectionYaml } = require("./yaml-parser");
|
const {
|
||||||
|
parseCollectionYaml,
|
||||||
|
extractMcpServers,
|
||||||
|
parseAgentFrontmatter,
|
||||||
|
} = require("./yaml-parser");
|
||||||
|
|
||||||
// Template sections for the README
|
// Template sections for the README
|
||||||
const TEMPLATES = {
|
const TEMPLATES = {
|
||||||
@ -68,9 +72,29 @@ Curated collections of related prompts, instructions, and chat modes organized a
|
|||||||
- Or browse to the individual files to copy content manually
|
- Or browse to the individual files to copy content manually
|
||||||
- Collections help you discover related customizations you might have missed`,
|
- Collections help you discover related customizations you might have missed`,
|
||||||
|
|
||||||
promotedCollectionsSection: `## 🌟 Featured Collections
|
featuredCollectionsSection: `## 🌟 Featured Collections
|
||||||
|
|
||||||
Discover our curated collections of prompts, instructions, and chat modes organized around specific themes and workflows.`,
|
Discover our curated collections of prompts, instructions, and chat modes organized around specific themes and workflows.`,
|
||||||
|
|
||||||
|
agentsSection: `## 🤖 Custom Agents
|
||||||
|
|
||||||
|
Custom GitHub Copilot agents that integrate with MCP servers to provide enhanced capabilities for specific workflows and tools.`,
|
||||||
|
|
||||||
|
agentsUsage: `### How to Use Custom Agents
|
||||||
|
|
||||||
|
**To Install:**
|
||||||
|
- Click the **VS Code** or **VS Code Insiders** install button for the agent you want to use
|
||||||
|
- Download the \`*.agent.md\` file and manually add it to your repository
|
||||||
|
|
||||||
|
**MCP Server Setup:**
|
||||||
|
- Each agent may require one or more MCP servers to function
|
||||||
|
- Click the MCP server to view it on the GitHub MCP registry
|
||||||
|
- Agents will automatically install the MCP servers they need when activated
|
||||||
|
|
||||||
|
**To Activate/Use:**
|
||||||
|
- Access installed agents through the VS Code Chat interface, through Copilot CLI, or assign them in Coding Agent
|
||||||
|
- Agents will have access to tools from configured MCP servers
|
||||||
|
- Follow agent-specific instructions for optimal usage`,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Add error handling utility
|
// Add error handling utility
|
||||||
@ -120,6 +144,19 @@ function extractTitle(filePath) {
|
|||||||
const cleanTitle = afterTitle.replace(/^['"]|['"]$/g, "");
|
const cleanTitle = afterTitle.replace(/^['"]|['"]$/g, "");
|
||||||
return cleanTitle;
|
return cleanTitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Look for name field in frontmatter
|
||||||
|
if (line.includes("name:")) {
|
||||||
|
// Extract everything after 'name:'
|
||||||
|
const afterName = line.substring(line.indexOf("name:") + 5).trim();
|
||||||
|
// Remove quotes if present
|
||||||
|
const cleanName = afterName.replace(/^['"]|['"]$/g, "");
|
||||||
|
// Convert hyphenated lowercase to title case
|
||||||
|
return cleanName
|
||||||
|
.split("-")
|
||||||
|
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
||||||
|
.join(" ");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,6 +259,15 @@ function extractTitle(filePath) {
|
|||||||
function extractDescription(filePath) {
|
function extractDescription(filePath) {
|
||||||
return safeFileOperation(
|
return safeFileOperation(
|
||||||
() => {
|
() => {
|
||||||
|
// Special handling for agent files
|
||||||
|
if (filePath.endsWith(".agent.md")) {
|
||||||
|
const agent = parseAgentFrontmatter(filePath);
|
||||||
|
if (agent && agent.description) {
|
||||||
|
return agent.description;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
const content = fs.readFileSync(filePath, "utf8");
|
const content = fs.readFileSync(filePath, "utf8");
|
||||||
|
|
||||||
// Parse frontmatter for description (for both prompts and instructions)
|
// Parse frontmatter for description (for both prompts and instructions)
|
||||||
@ -316,6 +362,7 @@ const AKA_INSTALL_URLS = {
|
|||||||
instructions: "https://aka.ms/awesome-copilot/install/instructions",
|
instructions: "https://aka.ms/awesome-copilot/install/instructions",
|
||||||
prompt: "https://aka.ms/awesome-copilot/install/prompt",
|
prompt: "https://aka.ms/awesome-copilot/install/prompt",
|
||||||
mode: "https://aka.ms/awesome-copilot/install/chatmode",
|
mode: "https://aka.ms/awesome-copilot/install/chatmode",
|
||||||
|
agent: "https://aka.ms/awesome-copilot/install/agent",
|
||||||
};
|
};
|
||||||
|
|
||||||
function makeBadges(link, type) {
|
function makeBadges(link, type) {
|
||||||
@ -343,7 +390,7 @@ function generateInstructionsSection(instructionsDir) {
|
|||||||
// Get all instruction files
|
// Get all instruction files
|
||||||
const instructionFiles = fs
|
const instructionFiles = fs
|
||||||
.readdirSync(instructionsDir)
|
.readdirSync(instructionsDir)
|
||||||
.filter((file) => file.endsWith(".md"));
|
.filter((file) => file.endsWith(".instructions.md"));
|
||||||
|
|
||||||
// Map instruction files to objects with title for sorting
|
// Map instruction files to objects with title for sorting
|
||||||
const instructionEntries = instructionFiles.map((file) => {
|
const instructionEntries = instructionFiles.map((file) => {
|
||||||
@ -449,56 +496,146 @@ function generatePromptsSection(promptsDir) {
|
|||||||
* Generate the chat modes section with a table of all chat modes
|
* Generate the chat modes section with a table of all chat modes
|
||||||
*/
|
*/
|
||||||
function generateChatModesSection(chatmodesDir) {
|
function generateChatModesSection(chatmodesDir) {
|
||||||
// Check if chatmodes directory exists
|
return generateUnifiedModeSection({
|
||||||
if (!fs.existsSync(chatmodesDir)) {
|
dir: chatmodesDir,
|
||||||
console.log("Chat modes directory does not exist");
|
extension: ".chatmode.md",
|
||||||
|
linkPrefix: "chatmodes",
|
||||||
|
badgeType: "mode",
|
||||||
|
includeMcpServers: false,
|
||||||
|
sectionTemplate: TEMPLATES.chatmodesSection,
|
||||||
|
usageTemplate: TEMPLATES.chatmodesUsage,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate MCP server links for an agent
|
||||||
|
* @param {string[]} servers - Array of MCP server names
|
||||||
|
* @returns {string} - Formatted MCP server links with badges
|
||||||
|
*/
|
||||||
|
function generateMcpServerLinks(servers) {
|
||||||
|
if (!servers || servers.length === 0) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get all chat mode files
|
const badges = [
|
||||||
const chatmodeFiles = fs
|
{
|
||||||
.readdirSync(chatmodesDir)
|
type: "vscode",
|
||||||
.filter((file) => file.endsWith(".chatmode.md"));
|
url: "https://img.shields.io/badge/Install_MCP-VS_Code-0098FF?style=flat-square",
|
||||||
|
badgeUrl: (serverName) =>
|
||||||
|
`https://aka.ms/awesome-copilot/install/mcp-vscode?vscode:mcp/by-name/${serverName}/mcp-server`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "insiders",
|
||||||
|
url: "https://img.shields.io/badge/Install_MCP-VS_Code_Insiders-24bfa5?style=flat-square",
|
||||||
|
badgeUrl: (serverName) =>
|
||||||
|
`https://aka.ms/awesome-copilot/install/mcp-vscode?vscode-insiders:mcp/by-name/${serverName}/mcp-server`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: "visualstudio",
|
||||||
|
url: "https://img.shields.io/badge/Install_MCP-Visual_Studio-C16FDE?style=flat-square",
|
||||||
|
badgeUrl: (serverName) =>
|
||||||
|
`https://aka.ms/awesome-copilot/install/mcp-visualstudio?vscode:mcp/by-name/${serverName}/mcp-server`,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
// Map chat mode files to objects with title for sorting
|
return servers
|
||||||
const chatmodeEntries = chatmodeFiles.map((file) => {
|
.map((serverName) => {
|
||||||
const filePath = path.join(chatmodesDir, file);
|
const registryUrl = `https://github.com/mcp/${serverName}/mcp-server`;
|
||||||
const title = extractTitle(filePath);
|
const badgeUrls = badges
|
||||||
return { file, filePath, title };
|
.map(
|
||||||
|
(badge) =>
|
||||||
|
`[](${badge.badgeUrl(serverName)})`
|
||||||
|
)
|
||||||
|
.join("<br />");
|
||||||
|
return `[${serverName}](${registryUrl})<br />${badgeUrls}`;
|
||||||
|
})
|
||||||
|
.join("<br />");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate the agents section with a table of all agents
|
||||||
|
*/
|
||||||
|
function generateAgentsSection(agentsDir) {
|
||||||
|
return generateUnifiedModeSection({
|
||||||
|
dir: agentsDir,
|
||||||
|
extension: ".agent.md",
|
||||||
|
linkPrefix: "agents",
|
||||||
|
badgeType: "agent",
|
||||||
|
includeMcpServers: true,
|
||||||
|
sectionTemplate: TEMPLATES.agentsSection,
|
||||||
|
usageTemplate: TEMPLATES.agentsUsage,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unified generator for chat modes & agents (future consolidation)
|
||||||
|
* @param {Object} cfg
|
||||||
|
* @param {string} cfg.dir - Directory path
|
||||||
|
* @param {string} cfg.extension - File extension to match (e.g. .chatmode.md, .agent.md)
|
||||||
|
* @param {string} cfg.linkPrefix - Link prefix folder name
|
||||||
|
* @param {string} cfg.badgeType - Badge key (mode, agent)
|
||||||
|
* @param {boolean} cfg.includeMcpServers - Whether to include MCP server column
|
||||||
|
* @param {string} cfg.sectionTemplate - Section heading template
|
||||||
|
* @param {string} cfg.usageTemplate - Usage subheading template
|
||||||
|
*/
|
||||||
|
function generateUnifiedModeSection(cfg) {
|
||||||
|
const {
|
||||||
|
dir,
|
||||||
|
extension,
|
||||||
|
linkPrefix,
|
||||||
|
badgeType,
|
||||||
|
includeMcpServers,
|
||||||
|
sectionTemplate,
|
||||||
|
usageTemplate,
|
||||||
|
} = cfg;
|
||||||
|
|
||||||
|
if (!fs.existsSync(dir)) {
|
||||||
|
console.log(`Directory missing for unified mode section: ${dir}`);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
const files = fs.readdirSync(dir).filter((f) => f.endsWith(extension));
|
||||||
|
|
||||||
|
const entries = files.map((file) => {
|
||||||
|
const filePath = path.join(dir, file);
|
||||||
|
return { file, filePath, title: extractTitle(filePath) };
|
||||||
});
|
});
|
||||||
|
|
||||||
// Sort by title alphabetically
|
entries.sort((a, b) => a.title.localeCompare(b.title));
|
||||||
chatmodeEntries.sort((a, b) => a.title.localeCompare(b.title));
|
console.log(
|
||||||
|
`Unified mode generator: ${entries.length} files for extension ${extension}`
|
||||||
|
);
|
||||||
|
if (entries.length === 0) return "";
|
||||||
|
|
||||||
console.log(`Found ${chatmodeEntries.length} chat mode files`);
|
let header = "| Title | Description |";
|
||||||
|
if (includeMcpServers) header += " MCP Servers |";
|
||||||
|
let separator = "| ----- | ----------- |";
|
||||||
|
if (includeMcpServers) separator += " ----------- |";
|
||||||
|
|
||||||
// If no chat modes, return empty string
|
let content = `${header}\n${separator}\n`;
|
||||||
if (chatmodeEntries.length === 0) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create table header
|
for (const { file, filePath, title } of entries) {
|
||||||
let chatmodesContent = "| Title | Description |\n| ----- | ----------- |\n";
|
const link = encodeURI(`${linkPrefix}/${file}`);
|
||||||
|
const description = extractDescription(filePath);
|
||||||
|
const badges = makeBadges(link, badgeType);
|
||||||
|
let mcpServerCell = "";
|
||||||
|
if (includeMcpServers) {
|
||||||
|
const servers = extractMcpServers(filePath);
|
||||||
|
mcpServerCell = generateMcpServerLinks(servers);
|
||||||
|
}
|
||||||
|
|
||||||
// Generate table rows for each chat mode file
|
if (includeMcpServers) {
|
||||||
for (const entry of chatmodeEntries) {
|
content += `| [${title}](${link})<br />${badges} | ${
|
||||||
const { file, filePath, title } = entry;
|
description && description !== "null" ? description : ""
|
||||||
const link = encodeURI(`chatmodes/${file}`);
|
} | ${mcpServerCell} |\n`;
|
||||||
|
|
||||||
// Check if there's a description in the frontmatter
|
|
||||||
const customDescription = extractDescription(filePath);
|
|
||||||
|
|
||||||
// Create badges for installation links
|
|
||||||
const badges = makeBadges(link, "mode");
|
|
||||||
|
|
||||||
if (customDescription && customDescription !== "null") {
|
|
||||||
chatmodesContent += `| [${title}](${link})<br />${badges} | ${customDescription} |\n`;
|
|
||||||
} else {
|
} else {
|
||||||
chatmodesContent += `| [${title}](${link})<br />${badges} | | |\n`;
|
content += `| [${title}](${link})<br />${badges} | ${
|
||||||
|
description && description !== "null" ? description : ""
|
||||||
|
} |\n`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return `${TEMPLATES.chatmodesSection}\n${TEMPLATES.chatmodesUsage}\n\n${chatmodesContent}`;
|
return `${sectionTemplate}\n${usageTemplate}\n\n${content}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -530,28 +667,28 @@ function generateCollectionsSection(collectionsDir) {
|
|||||||
const collectionId =
|
const collectionId =
|
||||||
collection.id || path.basename(file, ".collection.yml");
|
collection.id || path.basename(file, ".collection.yml");
|
||||||
const name = collection.name || collectionId;
|
const name = collection.name || collectionId;
|
||||||
const isPromoted = collection.display?.promoted === true;
|
const isFeatured = collection.display?.featured === true;
|
||||||
return { file, filePath, collection, collectionId, name, isPromoted };
|
return { file, filePath, collection, collectionId, name, isFeatured };
|
||||||
})
|
})
|
||||||
.filter((entry) => entry !== null); // Remove failed parses
|
.filter((entry) => entry !== null); // Remove failed parses
|
||||||
|
|
||||||
// Separate promoted and regular collections
|
// Separate featured and regular collections
|
||||||
const promotedCollections = collectionEntries.filter(
|
const featuredCollections = collectionEntries.filter(
|
||||||
(entry) => entry.isPromoted
|
(entry) => entry.isFeatured
|
||||||
);
|
);
|
||||||
const regularCollections = collectionEntries.filter(
|
const regularCollections = collectionEntries.filter(
|
||||||
(entry) => !entry.isPromoted
|
(entry) => !entry.isFeatured
|
||||||
);
|
);
|
||||||
|
|
||||||
// Sort each group alphabetically by name
|
// Sort each group alphabetically by name
|
||||||
promotedCollections.sort((a, b) => a.name.localeCompare(b.name));
|
featuredCollections.sort((a, b) => a.name.localeCompare(b.name));
|
||||||
regularCollections.sort((a, b) => a.name.localeCompare(b.name));
|
regularCollections.sort((a, b) => a.name.localeCompare(b.name));
|
||||||
|
|
||||||
// Combine: promoted first, then regular
|
// Combine: featured first, then regular
|
||||||
const sortedEntries = [...promotedCollections, ...regularCollections];
|
const sortedEntries = [...featuredCollections, ...regularCollections];
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
`Found ${collectionEntries.length} collection files (${promotedCollections.length} promoted)`
|
`Found ${collectionEntries.length} collection files (${featuredCollections.length} featured)`
|
||||||
);
|
);
|
||||||
|
|
||||||
// If no collections, return empty string
|
// If no collections, return empty string
|
||||||
@ -565,13 +702,13 @@ function generateCollectionsSection(collectionsDir) {
|
|||||||
|
|
||||||
// Generate table rows for each collection file
|
// Generate table rows for each collection file
|
||||||
for (const entry of sortedEntries) {
|
for (const entry of sortedEntries) {
|
||||||
const { collection, collectionId, name, isPromoted } = entry;
|
const { collection, collectionId, name, isFeatured } = entry;
|
||||||
const description = collection.description || "No description";
|
const description = collection.description || "No description";
|
||||||
const itemCount = collection.items ? collection.items.length : 0;
|
const itemCount = collection.items ? collection.items.length : 0;
|
||||||
const tags = collection.tags ? collection.tags.join(", ") : "";
|
const tags = collection.tags ? collection.tags.join(", ") : "";
|
||||||
|
|
||||||
const link = `collections/${collectionId}.md`;
|
const link = `collections/${collectionId}.md`;
|
||||||
const displayName = isPromoted ? `⭐ ${name}` : name;
|
const displayName = isFeatured ? `⭐ ${name}` : name;
|
||||||
|
|
||||||
collectionsContent += `| [${displayName}](${link}) | ${description} | ${itemCount} items | ${tags} |\n`;
|
collectionsContent += `| [${displayName}](${link}) | ${description} | ${itemCount} items | ${tags} |\n`;
|
||||||
}
|
}
|
||||||
@ -580,9 +717,9 @@ function generateCollectionsSection(collectionsDir) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate the promoted collections section for the main README
|
* Generate the featured collections section for the main README
|
||||||
*/
|
*/
|
||||||
function generatePromotedCollectionsSection(collectionsDir) {
|
function generateFeaturedCollectionsSection(collectionsDir) {
|
||||||
// Check if collections directory exists
|
// Check if collections directory exists
|
||||||
if (!fs.existsSync(collectionsDir)) {
|
if (!fs.existsSync(collectionsDir)) {
|
||||||
return "";
|
return "";
|
||||||
@ -593,8 +730,8 @@ function generatePromotedCollectionsSection(collectionsDir) {
|
|||||||
.readdirSync(collectionsDir)
|
.readdirSync(collectionsDir)
|
||||||
.filter((file) => file.endsWith(".collection.yml"));
|
.filter((file) => file.endsWith(".collection.yml"));
|
||||||
|
|
||||||
// Map collection files to objects with name for sorting, filter for promoted
|
// Map collection files to objects with name for sorting, filter for featured
|
||||||
const promotedCollections = collectionFiles
|
const featuredCollections = collectionFiles
|
||||||
.map((file) => {
|
.map((file) => {
|
||||||
const filePath = path.join(collectionsDir, file);
|
const filePath = path.join(collectionsDir, file);
|
||||||
return safeFileOperation(
|
return safeFileOperation(
|
||||||
@ -602,8 +739,8 @@ function generatePromotedCollectionsSection(collectionsDir) {
|
|||||||
const collection = parseCollectionYaml(filePath);
|
const collection = parseCollectionYaml(filePath);
|
||||||
if (!collection) return null;
|
if (!collection) return null;
|
||||||
|
|
||||||
// Only include collections with promoted: true
|
// Only include collections with featured: true
|
||||||
if (!collection.display?.promoted) return null;
|
if (!collection.display?.featured) return null;
|
||||||
|
|
||||||
const collectionId =
|
const collectionId =
|
||||||
collection.id || path.basename(file, ".collection.yml");
|
collection.id || path.basename(file, ".collection.yml");
|
||||||
@ -626,31 +763,31 @@ function generatePromotedCollectionsSection(collectionsDir) {
|
|||||||
null
|
null
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.filter((entry) => entry !== null); // Remove non-promoted and failed parses
|
.filter((entry) => entry !== null); // Remove non-featured and failed parses
|
||||||
|
|
||||||
// Sort by name alphabetically
|
// Sort by name alphabetically
|
||||||
promotedCollections.sort((a, b) => a.name.localeCompare(b.name));
|
featuredCollections.sort((a, b) => a.name.localeCompare(b.name));
|
||||||
|
|
||||||
console.log(`Found ${promotedCollections.length} promoted collection(s)`);
|
console.log(`Found ${featuredCollections.length} featured collection(s)`);
|
||||||
|
|
||||||
// If no promoted collections, return empty string
|
// If no featured collections, return empty string
|
||||||
if (promotedCollections.length === 0) {
|
if (featuredCollections.length === 0) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create table header
|
// Create table header
|
||||||
let promotedContent =
|
let featuredContent =
|
||||||
"| Name | Description | Items | Tags |\n| ---- | ----------- | ----- | ---- |\n";
|
"| Name | Description | Items | Tags |\n| ---- | ----------- | ----- | ---- |\n";
|
||||||
|
|
||||||
// Generate table rows for each promoted collection
|
// Generate table rows for each featured collection
|
||||||
for (const entry of promotedCollections) {
|
for (const entry of featuredCollections) {
|
||||||
const { collectionId, name, description, tags, itemCount } = entry;
|
const { collectionId, name, description, tags, itemCount } = entry;
|
||||||
const readmeLink = `collections/${collectionId}.md`;
|
const readmeLink = `collections/${collectionId}.md`;
|
||||||
|
|
||||||
promotedContent += `| [${name}](${readmeLink}) | ${description} | ${itemCount} items | ${tags} |\n`;
|
featuredContent += `| [${name}](${readmeLink}) | ${description} | ${itemCount} items | ${tags} |\n`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return `${TEMPLATES.promotedCollectionsSection}\n\n${promotedContent}`;
|
return `${TEMPLATES.featuredCollectionsSection}\n\n${featuredContent}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -672,7 +809,16 @@ function generateCollectionReadme(collection, collectionId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
content += `## Items in this Collection\n\n`;
|
content += `## Items in this Collection\n\n`;
|
||||||
content += `| Title | Type | Description |\n| ----- | ---- | ----------- |\n`;
|
|
||||||
|
// Check if collection has any agents to determine table structure (future: chatmodes may migrate)
|
||||||
|
const hasAgents = collection.items.some((item) => item.kind === "agent");
|
||||||
|
|
||||||
|
// Generate appropriate table header
|
||||||
|
if (hasAgents) {
|
||||||
|
content += `| Title | Type | Description | MCP Servers |\n| ----- | ---- | ----------- | ----------- |\n`;
|
||||||
|
} else {
|
||||||
|
content += `| Title | Type | Description |\n| ----- | ---- | ----------- |\n`;
|
||||||
|
}
|
||||||
|
|
||||||
let collectionUsageHeader = "## Collection Usage\n\n";
|
let collectionUsageHeader = "## Collection Usage\n\n";
|
||||||
let collectionUsageContent = [];
|
let collectionUsageContent = [];
|
||||||
@ -697,6 +843,8 @@ function generateCollectionReadme(collection, collectionId) {
|
|||||||
? "Chat Mode"
|
? "Chat Mode"
|
||||||
: item.kind === "instruction"
|
: item.kind === "instruction"
|
||||||
? "Instruction"
|
? "Instruction"
|
||||||
|
: item.kind === "agent"
|
||||||
|
? "Agent"
|
||||||
: "Prompt";
|
: "Prompt";
|
||||||
const link = `../${item.path}`;
|
const link = `../${item.path}`;
|
||||||
|
|
||||||
@ -707,6 +855,8 @@ function generateCollectionReadme(collection, collectionId) {
|
|||||||
? "instructions"
|
? "instructions"
|
||||||
: item.kind === "chat-mode"
|
: item.kind === "chat-mode"
|
||||||
? "mode"
|
? "mode"
|
||||||
|
: item.kind === "agent"
|
||||||
|
? "agent"
|
||||||
: "prompt"
|
: "prompt"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -716,7 +866,17 @@ function generateCollectionReadme(collection, collectionId) {
|
|||||||
.toLowerCase()})`
|
.toLowerCase()})`
|
||||||
: description;
|
: description;
|
||||||
|
|
||||||
content += `| [${title}](${link})<br />${badges} | ${typeDisplay} | ${usageDescription} |\n`;
|
// Generate MCP server column if collection has agents
|
||||||
|
content += buildCollectionRow({
|
||||||
|
hasAgents,
|
||||||
|
title,
|
||||||
|
link,
|
||||||
|
badges,
|
||||||
|
typeDisplay,
|
||||||
|
usageDescription,
|
||||||
|
filePath,
|
||||||
|
kind: item.kind,
|
||||||
|
});
|
||||||
// Generate Usage section for each collection
|
// Generate Usage section for each collection
|
||||||
if (item.usage && item.usage.trim()) {
|
if (item.usage && item.usage.trim()) {
|
||||||
collectionUsageContent.push(
|
collectionUsageContent.push(
|
||||||
@ -740,6 +900,30 @@ function generateCollectionReadme(collection, collectionId) {
|
|||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build a single markdown table row for a collection item.
|
||||||
|
* Handles optional MCP server column when agents are present.
|
||||||
|
*/
|
||||||
|
function buildCollectionRow({
|
||||||
|
hasAgents,
|
||||||
|
title,
|
||||||
|
link,
|
||||||
|
badges,
|
||||||
|
typeDisplay,
|
||||||
|
usageDescription,
|
||||||
|
filePath,
|
||||||
|
kind,
|
||||||
|
}) {
|
||||||
|
if (hasAgents) {
|
||||||
|
// Only agents currently have MCP servers; future migration may extend to chat modes.
|
||||||
|
const mcpServers = kind === "agent" ? extractMcpServers(filePath) : [];
|
||||||
|
const mcpServerCell =
|
||||||
|
mcpServers.length > 0 ? generateMcpServerLinks(mcpServers) : "";
|
||||||
|
return `| [${title}](${link})<br />${badges} | ${typeDisplay} | ${usageDescription} | ${mcpServerCell} |\n`;
|
||||||
|
}
|
||||||
|
return `| [${title}](${link})<br />${badges} | ${typeDisplay} | ${usageDescription} |\n`;
|
||||||
|
}
|
||||||
|
|
||||||
// Utility: write file only if content changed
|
// Utility: write file only if content changed
|
||||||
function writeFileIfChanged(filePath, content) {
|
function writeFileIfChanged(filePath, content) {
|
||||||
const exists = fs.existsSync(filePath);
|
const exists = fs.existsSync(filePath);
|
||||||
@ -776,6 +960,7 @@ try {
|
|||||||
const instructionsDir = path.join(__dirname, "instructions");
|
const instructionsDir = path.join(__dirname, "instructions");
|
||||||
const promptsDir = path.join(__dirname, "prompts");
|
const promptsDir = path.join(__dirname, "prompts");
|
||||||
const chatmodesDir = path.join(__dirname, "chatmodes");
|
const chatmodesDir = path.join(__dirname, "chatmodes");
|
||||||
|
const agentsDir = path.join(__dirname, "agents");
|
||||||
const collectionsDir = path.join(__dirname, "collections");
|
const collectionsDir = path.join(__dirname, "collections");
|
||||||
|
|
||||||
// Compose headers for standalone files by converting section headers to H1
|
// Compose headers for standalone files by converting section headers to H1
|
||||||
@ -785,6 +970,7 @@ try {
|
|||||||
);
|
);
|
||||||
const promptsHeader = TEMPLATES.promptsSection.replace(/^##\s/m, "# ");
|
const promptsHeader = TEMPLATES.promptsSection.replace(/^##\s/m, "# ");
|
||||||
const chatmodesHeader = TEMPLATES.chatmodesSection.replace(/^##\s/m, "# ");
|
const chatmodesHeader = TEMPLATES.chatmodesSection.replace(/^##\s/m, "# ");
|
||||||
|
const agentsHeader = TEMPLATES.agentsSection.replace(/^##\s/m, "# ");
|
||||||
const collectionsHeader = TEMPLATES.collectionsSection.replace(
|
const collectionsHeader = TEMPLATES.collectionsSection.replace(
|
||||||
/^##\s/m,
|
/^##\s/m,
|
||||||
"# "
|
"# "
|
||||||
@ -809,6 +995,14 @@ try {
|
|||||||
TEMPLATES.chatmodesUsage
|
TEMPLATES.chatmodesUsage
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Generate agents README
|
||||||
|
const agentsReadme = buildCategoryReadme(
|
||||||
|
generateAgentsSection,
|
||||||
|
agentsDir,
|
||||||
|
agentsHeader,
|
||||||
|
TEMPLATES.agentsUsage
|
||||||
|
);
|
||||||
|
|
||||||
// Generate collections README
|
// Generate collections README
|
||||||
const collectionsReadme = buildCategoryReadme(
|
const collectionsReadme = buildCategoryReadme(
|
||||||
generateCollectionsSection,
|
generateCollectionsSection,
|
||||||
@ -827,6 +1021,7 @@ try {
|
|||||||
path.join(__dirname, "README.chatmodes.md"),
|
path.join(__dirname, "README.chatmodes.md"),
|
||||||
chatmodesReadme
|
chatmodesReadme
|
||||||
);
|
);
|
||||||
|
writeFileIfChanged(path.join(__dirname, "README.agents.md"), agentsReadme);
|
||||||
writeFileIfChanged(
|
writeFileIfChanged(
|
||||||
path.join(__dirname, "README.collections.md"),
|
path.join(__dirname, "README.collections.md"),
|
||||||
collectionsReadme
|
collectionsReadme
|
||||||
@ -857,17 +1052,17 @@ try {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate promoted collections section and update main README.md
|
// Generate featured collections section and update main README.md
|
||||||
console.log("Updating main README.md with promoted collections...");
|
console.log("Updating main README.md with featured collections...");
|
||||||
const promotedSection = generatePromotedCollectionsSection(collectionsDir);
|
const featuredSection = generateFeaturedCollectionsSection(collectionsDir);
|
||||||
|
|
||||||
if (promotedSection) {
|
if (featuredSection) {
|
||||||
const mainReadmePath = path.join(__dirname, "README.md");
|
const mainReadmePath = path.join(__dirname, "README.md");
|
||||||
|
|
||||||
if (fs.existsSync(mainReadmePath)) {
|
if (fs.existsSync(mainReadmePath)) {
|
||||||
let readmeContent = fs.readFileSync(mainReadmePath, "utf8");
|
let readmeContent = fs.readFileSync(mainReadmePath, "utf8");
|
||||||
|
|
||||||
// Define markers to identify where to insert the promoted collections
|
// Define markers to identify where to insert the featured collections
|
||||||
const startMarker = "## 🌟 Featured Collections";
|
const startMarker = "## 🌟 Featured Collections";
|
||||||
const endMarker = "## MCP Server";
|
const endMarker = "## MCP Server";
|
||||||
|
|
||||||
@ -882,7 +1077,7 @@ try {
|
|||||||
const beforeSection = readmeContent.substring(0, startIndex);
|
const beforeSection = readmeContent.substring(0, startIndex);
|
||||||
const afterSection = readmeContent.substring(endIndex);
|
const afterSection = readmeContent.substring(endIndex);
|
||||||
readmeContent =
|
readmeContent =
|
||||||
beforeSection + promotedSection + "\n\n" + afterSection;
|
beforeSection + featuredSection + "\n\n" + afterSection;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Section doesn't exist, insert it before "## MCP Server"
|
// Section doesn't exist, insert it before "## MCP Server"
|
||||||
@ -890,17 +1085,17 @@ try {
|
|||||||
if (mcpIndex !== -1) {
|
if (mcpIndex !== -1) {
|
||||||
const beforeMcp = readmeContent.substring(0, mcpIndex);
|
const beforeMcp = readmeContent.substring(0, mcpIndex);
|
||||||
const afterMcp = readmeContent.substring(mcpIndex);
|
const afterMcp = readmeContent.substring(mcpIndex);
|
||||||
readmeContent = beforeMcp + promotedSection + "\n\n" + afterMcp;
|
readmeContent = beforeMcp + featuredSection + "\n\n" + afterMcp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
writeFileIfChanged(mainReadmePath, readmeContent);
|
writeFileIfChanged(mainReadmePath, readmeContent);
|
||||||
console.log("Main README.md updated with promoted collections");
|
console.log("Main README.md updated with featured collections");
|
||||||
} else {
|
} else {
|
||||||
console.warn("README.md not found, skipping promoted collections update");
|
console.warn("README.md not found, skipping featured collections update");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log("No promoted collections found to add to README.md");
|
console.log("No featured collections found to add to README.md");
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`Error generating category README files: ${error.message}`);
|
console.error(`Error generating category README files: ${error.message}`);
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const { parseCollectionYaml } = require("./yaml-parser");
|
const { parseCollectionYaml, parseAgentFrontmatter } = require("./yaml-parser");
|
||||||
|
|
||||||
// Maximum number of items allowed in a collection
|
// Maximum number of items allowed in a collection
|
||||||
const MAX_COLLECTION_ITEMS = 50;
|
const MAX_COLLECTION_ITEMS = 50;
|
||||||
@ -72,6 +72,98 @@ function validateCollectionTags(tags) {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function validateAgentFile(filePath, itemNumber) {
|
||||||
|
try {
|
||||||
|
const agent = parseAgentFrontmatter(filePath);
|
||||||
|
|
||||||
|
if (!agent) {
|
||||||
|
return `Item ${filePath} agent file could not be parsed`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate name field
|
||||||
|
if (!agent.name || typeof agent.name !== "string") {
|
||||||
|
return `Item ${filePath} agent must have a 'name' field`;
|
||||||
|
}
|
||||||
|
if (!/^[a-z0-9-]+$/.test(agent.name)) {
|
||||||
|
return `Item ${filePath} agent name must contain only lowercase letters, numbers, and hyphens`;
|
||||||
|
}
|
||||||
|
if (agent.name.length < 1 || agent.name.length > 50) {
|
||||||
|
return `Item ${filePath} agent name must be between 1 and 50 characters`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate description field
|
||||||
|
if (!agent.description || typeof agent.description !== "string") {
|
||||||
|
return `Item ${filePath} agent must have a 'description' field`;
|
||||||
|
}
|
||||||
|
if (agent.description.length < 1 || agent.description.length > 500) {
|
||||||
|
return `Item ${filePath} agent description must be between 1 and 500 characters`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate tools field (optional)
|
||||||
|
if (agent.tools !== undefined && !Array.isArray(agent.tools)) {
|
||||||
|
return `Item ${filePath} agent 'tools' must be an array`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate mcp-servers field (optional)
|
||||||
|
if (agent["mcp-servers"]) {
|
||||||
|
if (
|
||||||
|
typeof agent["mcp-servers"] !== "object" ||
|
||||||
|
Array.isArray(agent["mcp-servers"])
|
||||||
|
) {
|
||||||
|
return `Item ${filePath} agent 'mcp-servers' must be an object`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate each MCP server configuration
|
||||||
|
for (const [serverName, serverConfig] of Object.entries(
|
||||||
|
agent["mcp-servers"]
|
||||||
|
)) {
|
||||||
|
if (!serverConfig || typeof serverConfig !== "object") {
|
||||||
|
return `Item ${filePath} agent MCP server '${serverName}' must be an object`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!serverConfig.type || typeof serverConfig.type !== "string") {
|
||||||
|
return `Item ${filePath} agent MCP server '${serverName}' must have a 'type' field`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// For local type servers, command is required
|
||||||
|
if (serverConfig.type === "local" && !serverConfig.command) {
|
||||||
|
return `Item ${filePath} agent MCP server '${serverName}' with type 'local' must have a 'command' field`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate args if present
|
||||||
|
if (
|
||||||
|
serverConfig.args !== undefined &&
|
||||||
|
!Array.isArray(serverConfig.args)
|
||||||
|
) {
|
||||||
|
return `Item ${filePath} agent MCP server '${serverName}' 'args' must be an array`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate tools if present
|
||||||
|
if (
|
||||||
|
serverConfig.tools !== undefined &&
|
||||||
|
!Array.isArray(serverConfig.tools)
|
||||||
|
) {
|
||||||
|
return `Item ${filePath} agent MCP server '${serverName}' 'tools' must be an array`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate env if present
|
||||||
|
if (serverConfig.env !== undefined) {
|
||||||
|
if (
|
||||||
|
typeof serverConfig.env !== "object" ||
|
||||||
|
Array.isArray(serverConfig.env)
|
||||||
|
) {
|
||||||
|
return `Item ${filePath} agent MCP server '${serverName}' 'env' must be an object`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null; // All validations passed
|
||||||
|
} catch (error) {
|
||||||
|
return `Item ${filePath} agent file validation failed: ${error.message}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function validateCollectionItems(items) {
|
function validateCollectionItems(items) {
|
||||||
if (!items || !Array.isArray(items)) {
|
if (!items || !Array.isArray(items)) {
|
||||||
return "Items is required and must be an array";
|
return "Items is required and must be an array";
|
||||||
@ -94,8 +186,10 @@ function validateCollectionItems(items) {
|
|||||||
if (!item.kind || typeof item.kind !== "string") {
|
if (!item.kind || typeof item.kind !== "string") {
|
||||||
return `Item ${i + 1} must have a kind string`;
|
return `Item ${i + 1} must have a kind string`;
|
||||||
}
|
}
|
||||||
if (!["prompt", "instruction", "chat-mode"].includes(item.kind)) {
|
if (!["prompt", "instruction", "chat-mode", "agent"].includes(item.kind)) {
|
||||||
return `Item ${i + 1} kind must be one of: prompt, instruction, chat-mode`;
|
return `Item ${
|
||||||
|
i + 1
|
||||||
|
} kind must be one of: prompt, instruction, chat-mode, agent`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate file path exists
|
// Validate file path exists
|
||||||
@ -106,13 +200,35 @@ function validateCollectionItems(items) {
|
|||||||
|
|
||||||
// Validate path pattern matches kind
|
// Validate path pattern matches kind
|
||||||
if (item.kind === "prompt" && !item.path.endsWith(".prompt.md")) {
|
if (item.kind === "prompt" && !item.path.endsWith(".prompt.md")) {
|
||||||
return `Item ${i + 1} kind is "prompt" but path doesn't end with .prompt.md`;
|
return `Item ${
|
||||||
|
i + 1
|
||||||
|
} kind is "prompt" but path doesn't end with .prompt.md`;
|
||||||
}
|
}
|
||||||
if (item.kind === "instruction" && !item.path.endsWith(".instructions.md")) {
|
if (
|
||||||
return `Item ${i + 1} kind is "instruction" but path doesn't end with .instructions.md`;
|
item.kind === "instruction" &&
|
||||||
|
!item.path.endsWith(".instructions.md")
|
||||||
|
) {
|
||||||
|
return `Item ${
|
||||||
|
i + 1
|
||||||
|
} kind is "instruction" but path doesn't end with .instructions.md`;
|
||||||
}
|
}
|
||||||
if (item.kind === "chat-mode" && !item.path.endsWith(".chatmode.md")) {
|
if (item.kind === "chat-mode" && !item.path.endsWith(".chatmode.md")) {
|
||||||
return `Item ${i + 1} kind is "chat-mode" but path doesn't end with .chatmode.md`;
|
return `Item ${
|
||||||
|
i + 1
|
||||||
|
} kind is "chat-mode" but path doesn't end with .chatmode.md`;
|
||||||
|
}
|
||||||
|
if (item.kind === "agent" && !item.path.endsWith(".agent.md")) {
|
||||||
|
return `Item ${
|
||||||
|
i + 1
|
||||||
|
} kind is "agent" but path doesn't end with .agent.md`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate agent-specific frontmatter
|
||||||
|
if (item.kind === "agent") {
|
||||||
|
const agentValidation = validateAgentFile(filePath, i + 1);
|
||||||
|
if (agentValidation) {
|
||||||
|
return agentValidation;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@ -125,14 +241,17 @@ function validateCollectionDisplay(display) {
|
|||||||
if (display) {
|
if (display) {
|
||||||
// Normalize ordering and show_badge in case the YAML parser left inline comments
|
// Normalize ordering and show_badge in case the YAML parser left inline comments
|
||||||
const normalize = (val) => {
|
const normalize = (val) => {
|
||||||
if (typeof val !== 'string') return val;
|
if (typeof val !== "string") return val;
|
||||||
// Strip any inline comment starting with '#'
|
// Strip any inline comment starting with '#'
|
||||||
const hashIndex = val.indexOf('#');
|
const hashIndex = val.indexOf("#");
|
||||||
if (hashIndex !== -1) {
|
if (hashIndex !== -1) {
|
||||||
val = val.substring(0, hashIndex).trim();
|
val = val.substring(0, hashIndex).trim();
|
||||||
}
|
}
|
||||||
// Also strip surrounding quotes if present
|
// Also strip surrounding quotes if present
|
||||||
if ((val.startsWith("\"") && val.endsWith("\"")) || (val.startsWith("'") && val.endsWith("'"))) {
|
if (
|
||||||
|
(val.startsWith('"') && val.endsWith('"')) ||
|
||||||
|
(val.startsWith("'") && val.endsWith("'"))
|
||||||
|
) {
|
||||||
val = val.substring(1, val.length - 1);
|
val = val.substring(1, val.length - 1);
|
||||||
}
|
}
|
||||||
return val.trim();
|
return val.trim();
|
||||||
@ -149,11 +268,11 @@ function validateCollectionDisplay(display) {
|
|||||||
const raw = display.show_badge;
|
const raw = display.show_badge;
|
||||||
const normalizedBadge = normalize(raw);
|
const normalizedBadge = normalize(raw);
|
||||||
// Accept boolean or string boolean values
|
// Accept boolean or string boolean values
|
||||||
if (typeof normalizedBadge === 'string') {
|
if (typeof normalizedBadge === "string") {
|
||||||
if (!['true', 'false'].includes(normalizedBadge.toLowerCase())) {
|
if (!["true", "false"].includes(normalizedBadge.toLowerCase())) {
|
||||||
return "Display show_badge must be boolean";
|
return "Display show_badge must be boolean";
|
||||||
}
|
}
|
||||||
} else if (typeof normalizedBadge !== 'boolean') {
|
} else if (typeof normalizedBadge !== "boolean") {
|
||||||
return "Display show_badge must be boolean";
|
return "Display show_badge must be boolean";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -224,7 +343,7 @@ function validateCollections() {
|
|||||||
|
|
||||||
if (errors.length > 0) {
|
if (errors.length > 0) {
|
||||||
console.error(`❌ Validation errors in ${file}:`);
|
console.error(`❌ Validation errors in ${file}:`);
|
||||||
errors.forEach(error => console.error(` - ${error}`));
|
errors.forEach((error) => console.error(` - ${error}`));
|
||||||
hasErrors = true;
|
hasErrors = true;
|
||||||
} else {
|
} else {
|
||||||
console.log(`✅ ${file} is valid`);
|
console.log(`✅ ${file} is valid`);
|
||||||
@ -233,7 +352,9 @@ function validateCollections() {
|
|||||||
// Check for duplicate IDs
|
// Check for duplicate IDs
|
||||||
if (collection.id) {
|
if (collection.id) {
|
||||||
if (usedIds.has(collection.id)) {
|
if (usedIds.has(collection.id)) {
|
||||||
console.error(`❌ Duplicate collection ID "${collection.id}" found in ${file}`);
|
console.error(
|
||||||
|
`❌ Duplicate collection ID "${collection.id}" found in ${file}`
|
||||||
|
);
|
||||||
hasErrors = true;
|
hasErrors = true;
|
||||||
} else {
|
} else {
|
||||||
usedIds.add(collection.id);
|
usedIds.add(collection.id);
|
||||||
|
|||||||
266
yaml-parser.js
266
yaml-parser.js
@ -1,5 +1,6 @@
|
|||||||
// Simple YAML parser for collection files
|
// YAML parser for collection files and agent frontmatter
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
|
const yaml = require("js-yaml");
|
||||||
|
|
||||||
function safeFileOperation(operation, filePath, defaultValue = null) {
|
function safeFileOperation(operation, filePath, defaultValue = null) {
|
||||||
try {
|
try {
|
||||||
@ -10,159 +11,132 @@ function safeFileOperation(operation, filePath, defaultValue = null) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse a collection YAML file (.collection.yml)
|
||||||
|
* Collections are pure YAML files without frontmatter delimiters
|
||||||
|
* @param {string} filePath - Path to the collection file
|
||||||
|
* @returns {object|null} Parsed collection object or null on error
|
||||||
|
*/
|
||||||
function parseCollectionYaml(filePath) {
|
function parseCollectionYaml(filePath) {
|
||||||
return safeFileOperation(
|
return safeFileOperation(
|
||||||
() => {
|
() => {
|
||||||
const content = fs.readFileSync(filePath, "utf8");
|
const content = fs.readFileSync(filePath, "utf8");
|
||||||
const lines = content.split("\n");
|
|
||||||
const result = {};
|
|
||||||
let currentKey = null;
|
|
||||||
let currentArray = null;
|
|
||||||
let currentObject = null;
|
|
||||||
|
|
||||||
const readLiteralBlock = (startIndex, parentIndent) => {
|
// Collections are pure YAML files, parse directly with js-yaml
|
||||||
const blockLines = [];
|
return yaml.load(content, { schema: yaml.JSON_SCHEMA });
|
||||||
let blockIndent = null;
|
|
||||||
let index = startIndex;
|
|
||||||
|
|
||||||
for (; index < lines.length; index++) {
|
|
||||||
const rawLine = lines[index];
|
|
||||||
const trimmedLine = rawLine.trimEnd();
|
|
||||||
const contentOnly = trimmedLine.trim();
|
|
||||||
const lineIndent = rawLine.length - rawLine.trimLeft().length;
|
|
||||||
|
|
||||||
if (contentOnly === "" && blockIndent === null) {
|
|
||||||
// Preserve leading blank lines inside the literal block
|
|
||||||
blockLines.push("");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (contentOnly !== "" && lineIndent <= parentIndent) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (contentOnly === "") {
|
|
||||||
blockLines.push("");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (blockIndent === null) {
|
|
||||||
blockIndent = lineIndent;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockLines.push(rawLine.slice(blockIndent));
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
content: blockLines.join("\n").replace(/\r/g, "").trimEnd(),
|
|
||||||
nextIndex: index - 1,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
for (let i = 0; i < lines.length; i++) {
|
|
||||||
const line = lines[i];
|
|
||||||
const trimmed = line.trim();
|
|
||||||
|
|
||||||
if (!trimmed || trimmed.startsWith("#")) continue;
|
|
||||||
|
|
||||||
const leadingSpaces = line.length - line.trimLeft().length;
|
|
||||||
|
|
||||||
// Handle array items starting with -
|
|
||||||
if (trimmed.startsWith("- ")) {
|
|
||||||
if (currentKey === "items") {
|
|
||||||
if (!currentArray) {
|
|
||||||
currentArray = [];
|
|
||||||
result[currentKey] = currentArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse item object
|
|
||||||
const item = {};
|
|
||||||
currentArray.push(item);
|
|
||||||
currentObject = item;
|
|
||||||
|
|
||||||
// Handle inline properties on same line as -
|
|
||||||
const restOfLine = trimmed.substring(2).trim();
|
|
||||||
if (restOfLine) {
|
|
||||||
const colonIndex = restOfLine.indexOf(":");
|
|
||||||
if (colonIndex > -1) {
|
|
||||||
const key = restOfLine.substring(0, colonIndex).trim();
|
|
||||||
const value = restOfLine.substring(colonIndex + 1).trim();
|
|
||||||
item[key] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (currentKey === "tags") {
|
|
||||||
if (!currentArray) {
|
|
||||||
currentArray = [];
|
|
||||||
result[currentKey] = currentArray;
|
|
||||||
}
|
|
||||||
const value = trimmed.substring(2).trim();
|
|
||||||
currentArray.push(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Handle key-value pairs
|
|
||||||
else if (trimmed.includes(":")) {
|
|
||||||
const colonIndex = trimmed.indexOf(":");
|
|
||||||
const key = trimmed.substring(0, colonIndex).trim();
|
|
||||||
let value = trimmed.substring(colonIndex + 1).trim();
|
|
||||||
|
|
||||||
if (leadingSpaces === 0) {
|
|
||||||
// Top-level property
|
|
||||||
currentKey = key;
|
|
||||||
currentArray = null;
|
|
||||||
currentObject = null;
|
|
||||||
|
|
||||||
if (value) {
|
|
||||||
// Handle array format [item1, item2, item3]
|
|
||||||
if (value.startsWith("[") && value.endsWith("]")) {
|
|
||||||
const arrayContent = value.slice(1, -1);
|
|
||||||
if (arrayContent.trim()) {
|
|
||||||
result[key] = arrayContent.split(",").map(item => item.trim());
|
|
||||||
} else {
|
|
||||||
result[key] = [];
|
|
||||||
}
|
|
||||||
currentKey = null; // Reset since we handled the array
|
|
||||||
} else if (value === "|" || value === ">") {
|
|
||||||
const { content: blockContent, nextIndex } = readLiteralBlock(i + 1, leadingSpaces);
|
|
||||||
result[key] = blockContent;
|
|
||||||
i = nextIndex;
|
|
||||||
} else {
|
|
||||||
result[key] = value;
|
|
||||||
}
|
|
||||||
} else if (key === "items" || key === "tags") {
|
|
||||||
// Will be populated by array items
|
|
||||||
result[key] = [];
|
|
||||||
currentArray = result[key];
|
|
||||||
} else if (key === "display") {
|
|
||||||
result[key] = {};
|
|
||||||
currentObject = result[key];
|
|
||||||
}
|
|
||||||
} else if (currentObject && leadingSpaces > 0) {
|
|
||||||
// Property of current object (e.g., display properties)
|
|
||||||
if (value === "|" || value === ">") {
|
|
||||||
const { content: blockContent, nextIndex } = readLiteralBlock(i + 1, leadingSpaces);
|
|
||||||
currentObject[key] = blockContent;
|
|
||||||
i = nextIndex;
|
|
||||||
} else {
|
|
||||||
currentObject[key] = value === "true" ? true : value === "false" ? false : value;
|
|
||||||
}
|
|
||||||
} else if (currentArray && currentObject && leadingSpaces > 2) {
|
|
||||||
// Property of array item object
|
|
||||||
if (value === "|" || value === ">") {
|
|
||||||
const { content: blockContent, nextIndex } = readLiteralBlock(i + 1, leadingSpaces);
|
|
||||||
currentObject[key] = blockContent;
|
|
||||||
i = nextIndex;
|
|
||||||
} else {
|
|
||||||
currentObject[key] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
},
|
},
|
||||||
filePath,
|
filePath,
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = { parseCollectionYaml, safeFileOperation };
|
/**
|
||||||
|
* Parse agent frontmatter from an agent markdown file (.agent.md)
|
||||||
|
* Agent files use standard markdown frontmatter with --- delimiters
|
||||||
|
* @param {string} filePath - Path to the agent file
|
||||||
|
* @returns {object|null} Parsed agent frontmatter or null on error
|
||||||
|
*/
|
||||||
|
function parseAgentFrontmatter(filePath) {
|
||||||
|
return safeFileOperation(
|
||||||
|
() => {
|
||||||
|
const content = fs.readFileSync(filePath, "utf8");
|
||||||
|
const lines = content.split("\n");
|
||||||
|
|
||||||
|
// Agent files use standard markdown frontmatter format
|
||||||
|
// Find the YAML frontmatter between --- delimiters
|
||||||
|
let yamlStart = -1;
|
||||||
|
let yamlEnd = -1;
|
||||||
|
let delimiterCount = 0;
|
||||||
|
|
||||||
|
for (let i = 0; i < lines.length; i++) {
|
||||||
|
const trimmed = lines[i].trim();
|
||||||
|
|
||||||
|
if (trimmed === "---") {
|
||||||
|
delimiterCount++;
|
||||||
|
if (delimiterCount === 1) {
|
||||||
|
yamlStart = i + 1;
|
||||||
|
} else if (delimiterCount === 2) {
|
||||||
|
yamlEnd = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (yamlStart === -1 || yamlEnd === -1) {
|
||||||
|
throw new Error(
|
||||||
|
"Could not find YAML frontmatter delimiters (---) in agent file"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract YAML content between delimiters
|
||||||
|
const yamlContent = lines.slice(yamlStart, yamlEnd).join("\n");
|
||||||
|
|
||||||
|
// Parse YAML directly with js-yaml
|
||||||
|
const frontmatter = yaml.load(yamlContent, { schema: yaml.JSON_SCHEMA });
|
||||||
|
|
||||||
|
// Normalize string fields that can accumulate trailing newlines/spaces
|
||||||
|
if (frontmatter) {
|
||||||
|
if (typeof frontmatter.name === "string") {
|
||||||
|
frontmatter.name = frontmatter.name.replace(/[\r\n]+$/g, "").trim();
|
||||||
|
}
|
||||||
|
if (typeof frontmatter.description === "string") {
|
||||||
|
// Remove only trailing whitespace/newlines; preserve internal formatting
|
||||||
|
frontmatter.description = frontmatter.description.replace(
|
||||||
|
/[\s\r\n]+$/g,
|
||||||
|
""
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return frontmatter;
|
||||||
|
},
|
||||||
|
filePath,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract agent metadata including MCP server information
|
||||||
|
* @param {string} filePath - Path to the agent file
|
||||||
|
* @returns {object|null} Agent metadata object with name, description, tools, and mcp-servers
|
||||||
|
*/
|
||||||
|
function extractAgentMetadata(filePath) {
|
||||||
|
const frontmatter = parseAgentFrontmatter(filePath);
|
||||||
|
|
||||||
|
if (!frontmatter) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: typeof frontmatter.name === "string" ? frontmatter.name : null,
|
||||||
|
description:
|
||||||
|
typeof frontmatter.description === "string"
|
||||||
|
? frontmatter.description
|
||||||
|
: null,
|
||||||
|
tools: frontmatter.tools || [],
|
||||||
|
mcpServers: frontmatter["mcp-servers"] || {},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract MCP server names from an agent file
|
||||||
|
* @param {string} filePath - Path to the agent file
|
||||||
|
* @returns {string[]} Array of MCP server names
|
||||||
|
*/
|
||||||
|
function extractMcpServers(filePath) {
|
||||||
|
const metadata = extractAgentMetadata(filePath);
|
||||||
|
|
||||||
|
if (!metadata || !metadata.mcpServers) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return Object.keys(metadata.mcpServers);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
parseCollectionYaml,
|
||||||
|
parseAgentFrontmatter,
|
||||||
|
extractAgentMetadata,
|
||||||
|
extractMcpServers,
|
||||||
|
safeFileOperation,
|
||||||
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user