diff --git a/content/apps/github-marketplace/creating-apps-for-github-marketplace/requirements-for-listing-an-app.md b/content/apps/github-marketplace/creating-apps-for-github-marketplace/requirements-for-listing-an-app.md index 81cfff1cf82a..75b66b44c06c 100644 --- a/content/apps/github-marketplace/creating-apps-for-github-marketplace/requirements-for-listing-an-app.md +++ b/content/apps/github-marketplace/creating-apps-for-github-marketplace/requirements-for-listing-an-app.md @@ -41,7 +41,7 @@ All listings should meet the following requirements, regardless of whether they * Listings must provide a method to receive support through a valid support link and/or a support email address. * All additional links in a listing, such as Terms of Service or a Status Page, must work and resolve to a relevant page. * Apps must provide value to customers and integrate with the platform in some way beyond authentication. -* Apps must be publicly available in {% data variables.product.prodname_marketplace %} and cannot be in {% data variables.release-phases.public_preview %} or available by invite only, with the exception of {% data variables.copilot.copilot_extensions_short %}. +* Apps must be publicly available in {% data variables.product.prodname_marketplace %} and cannot be in {% data variables.release-phases.public_preview %} or available by invite only. * Apps must have webhook events set up to notify the publisher of any plan changes or cancellations using the {% data variables.product.prodname_marketplace %} API. For more information, see [AUTOTITLE](/apps/github-marketplace/using-the-github-marketplace-api-in-your-app). For more information on providing a good customer experience, see [AUTOTITLE](/apps/github-marketplace/creating-apps-for-github-marketplace/customer-experience-best-practices-for-apps). @@ -58,23 +58,6 @@ To protect your customers, we recommend that you also follow security best pract {% data reusables.marketplace.free-apps-encouraged %} -## Requirements for {% data variables.copilot.copilot_extensions %} - -{% data variables.copilot.copilot_extensions_short %} are essentially {% data variables.product.prodname_github_apps %} with additional read access to {% data variables.copilot.copilot_chat_short %}, integration with the {% data variables.product.prodname_copilot_short %} API, and optional integration into other LLMs. - -To publish an extension, it must be owned by an organization account with Verified Creator status. For more information about the verification process or transferring ownership of your app, see [AUTOTITLE](/apps/github-marketplace/github-marketplace-overview/applying-for-publisher-verification-for-your-organization). - -The requirements to publish a {% data variables.copilot.copilot_extension_short %} are the same as the requirements for free apps, with the following exceptions: -* Your extension must provide a clear and descriptive response to a prompt like "What can you do?" or "List your capabilities". -* Your extension can be in {% data variables.release-phases.public_preview %} as long as that is clearly communicated in the listing description. If you are using a waitlist, you must also include a link to sign up at the top of the description. Someone from the {% data variables.product.github %} review team will join the waitlist and email your technical lead requesting access for testing. -* You must include links to two videos that demonstrate the following: - * A few example prompts and responses from your extension - * A net new user installing, authenticating, and sending their first prompt to your extension - - These videos are private to {% data variables.product.github %} and are used solely for reviewing your listing submission. The videos can be brief, and you don't need to edit them. -* Your extension must provide a stable and reliable user experience, and be able to perform the capabilities listed in the description. -* You must provide a pathway for new users to install, set up, and authorize your extension with minimal friction. If the {% data variables.product.github %} review team is not able to successfully test your extension, it will not be approved for publishing. - ## Requirements for paid apps To publish a paid plan for your app on the {% data variables.product.prodname_marketplace %}, your app must be owned by an organization that is a verified publisher. For more information about the verification process or transferring ownership of your app, see [AUTOTITLE](/apps/github-marketplace/github-marketplace-overview/applying-for-publisher-verification-for-your-organization). diff --git a/content/apps/github-marketplace/github-marketplace-overview/about-github-marketplace-for-apps.md b/content/apps/github-marketplace/github-marketplace-overview/about-github-marketplace-for-apps.md index b7e5d8e98b8e..4573242c425d 100644 --- a/content/apps/github-marketplace/github-marketplace-overview/about-github-marketplace-for-apps.md +++ b/content/apps/github-marketplace/github-marketplace-overview/about-github-marketplace-for-apps.md @@ -44,12 +44,6 @@ If you're interested in creating an app for {% data variables.product.prodname_m {% data reusables.marketplace.github_apps_preferred %}, although you can list both OAuth and {% data variables.product.prodname_github_apps %} in {% data variables.product.prodname_marketplace %}. For more information, see [AUTOTITLE](/apps/oauth-apps/building-oauth-apps/differences-between-github-apps-and-oauth-apps) and [AUTOTITLE](/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps). -### {% data variables.copilot.copilot_extensions %} - -{% data reusables.copilot.copilot-extensions.copilot-extensions-intro %} - -To learn more about {% data variables.copilot.copilot_extensions_short %}, see [AUTOTITLE](/copilot/github-copilot-chat/github-copilot-extensions/using-github-copilot-extensions). - ## Publishing an app to {% data variables.product.prodname_marketplace %} overview When you have finished creating your app, you can share it with other users by publishing it to {% data variables.product.prodname_marketplace %}. In summary, the process is: diff --git a/content/copilot/concepts/billing/copilot-requests.md b/content/copilot/concepts/billing/copilot-requests.md index 7253e42d7f69..263523bb2574 100644 --- a/content/copilot/concepts/billing/copilot-requests.md +++ b/content/copilot/concepts/billing/copilot-requests.md @@ -44,7 +44,6 @@ The following {% data variables.product.prodname_copilot_short %} features can u | [{% data variables.copilot.copilot_cli_short %}](/copilot/concepts/agents/about-copilot-cli) | Each prompt to {% data variables.copilot.copilot_cli_short %} uses **one premium request** with the default model. For other models, this is multiplied by the model's rate. | {% data variables.product.prodname_copilot_short %} premium requests | | [{% data variables.product.prodname_copilot_short %} code review](/copilot/using-github-copilot/code-review/using-copilot-code-review) | When you assign {% data variables.product.prodname_copilot_short %} as a reviewer for a pull request, **one premium request** is used each time {% data variables.product.prodname_copilot_short %} posts comments to the pull request. | {% data variables.product.prodname_copilot_short %} premium requests | | [{% data variables.copilot.copilot_coding_agent %}](/copilot/concepts/about-copilot-coding-agent) | {% data variables.copilot.copilot_coding_agent %} uses **one premium request** per session, plus **one premium request** for each real-time steering comment made during an active session. A session begins when you ask {% data variables.product.prodname_copilot_short %} to create a pull request or make one or more changes to an existing pull request. | {% data variables.copilot.copilot_coding_agent %} premium requests | -| [{% data variables.copilot.copilot_extensions_short %}](/copilot/concepts/copilot-extensions/about-copilot-extensions) | {% data variables.copilot.copilot_extensions_short %} uses **one premium request** per user prompt, multiplied by the model's rate. | {% data variables.product.prodname_copilot_short %} premium requests | | [{% data variables.copilot.copilot_spaces %}](/copilot/using-github-copilot/copilot-spaces/about-organizing-and-sharing-context-with-copilot-spaces) | {% data variables.copilot.copilot_spaces %} uses **one premium request** per user prompt, multiplied by the model's rate. | {% data variables.product.prodname_copilot_short %} premium requests | | [{% data variables.product.prodname_spark_short %}](/copilot/tutorials/building-ai-app-prototypes) | Each prompt to {% data variables.product.prodname_spark_short %} uses a fixed rate of **four premium requests**. | {% data variables.product.prodname_spark_short %} premium requests | | [{% data variables.product.prodname_openai_codex %} integration](/copilot/concepts/agents/openai-codex) | While in preview, each prompt to {% data variables.product.prodname_openai_codex %} uses **one premium request** multiplied by the model multiplier rates. | {% data variables.product.prodname_copilot_short %} premium requests | diff --git a/content/copilot/concepts/chat.md b/content/copilot/concepts/chat.md index 3e63f8b80bec..0e0a0fade75a 100644 --- a/content/copilot/concepts/chat.md +++ b/content/copilot/concepts/chat.md @@ -58,10 +58,6 @@ MCP is an open standard that defines how applications share context with large l You can configure MCP servers to provide context to {% data variables.copilot.copilot_chat_short %} in various IDEs, such as {% data variables.product.prodname_vscode %} and JetBrains IDEs. For {% data variables.copilot.copilot_chat_dotcom_short %}, the {% data variables.product.github %} MCP server is automatically configured, enabling {% data variables.copilot.copilot_chat_short %} to perform a limited set of tasks, at your request, such as creating branches or merging pull requests. For more information, see [AUTOTITLE](/copilot/how-tos/context/model-context-protocol/extending-copilot-chat-with-mcp) and [AUTOTITLE](/copilot/how-tos/context/model-context-protocol/using-the-github-mcp-server). -### Extending {% data variables.copilot.copilot_chat_short %} with external tools - -{% data reusables.copilot.copilot-extensions.extending-copilot-chat %} - ### Further reading * [AUTOTITLE](/copilot/how-tos/chat-with-copilot) how-to guides diff --git a/content/copilot/concepts/context/copilot-extensions.md b/content/copilot/concepts/context/copilot-extensions.md deleted file mode 100644 index 031b3328946a..000000000000 --- a/content/copilot/concepts/context/copilot-extensions.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: About GitHub Copilot Extensions -shortTitle: Copilot extensions -intro: 'Learn about {% data variables.copilot.copilot_extensions_short %}.' -allowTitleToDifferFromFilename: true -product: '{% data reusables.gated-features.copilot-extensions %}' -versions: - feature: copilot-extensions -topics: - - Copilot -redirect_from: - - /copilot/reference/copilot-extensions/copilot-extensions-faq - - /copilot/reference/copilot-extensions - - /copilot/concepts/copilot-extensions/about-copilot-extensions - - /copilot/concepts/copilot-extensions/about-extensions -contentType: concepts -category: - - Learn about Copilot ---- - - - - - -{% data reusables.copilot.copilot-extensions.extensions-retirement %} - - - -## About {% data variables.copilot.copilot_extensions_short %} - -{% data reusables.copilot.copilot-extensions.about-copilot-extensions %} - -## Supported clients and IDEs - -{% data reusables.copilot.copilot-extensions.supported-clients-and-ides-table %} - -## Visibility of {% data variables.copilot.copilot_extensions %} - -{% data variables.copilot.copilot_extensions %} can be private, public and shareable, or public and listed on the {% data variables.product.prodname_marketplace %}. Which visibility option you choose will depend on your use case and the audience you are targeting. - -* Private extensions are often preferred by large enterprises or companies that: - * Want more customization and controls over data access - * Need to integrate with a large volume of internal documents and databases - * Have strict security policies making it difficult to authorize permissions for third-parties -* Public extensions are suitable for: - * Open-source projects - * Collaborative development and use across organizations within an enterprise - * Sharing your tool and getting feedback before publishing to the {% data variables.product.prodname_marketplace %} -* {% data variables.product.prodname_marketplace %} extensions are ideal for third-parties that want to: - * Offer their service to a broader audience - * Integrate their tool into the developer workflow on {% data variables.product.company_short %} and the IDE - * Leverage the {% data variables.product.company_short %} ecosystem to raise awareness for their product - -## {% data variables.copilot.copilot_extensions %} permissions - -Permissions vary by extension, depending on the level of authorization that the extension requires in order to respond to your query. You can view the required permissions on the extension’s installation page, located after the billing information step and before the install and authorize step. - -**For extension users**: At a minimum, the **{% data variables.copilot.copilot_chat_short %}** permissions must be set to "Read-only". Additional permissions may include executing write actions on other surfaces and authorizing read access to repository and organization level data in {% data variables.product.github %}. - -**For extension creators**: In addition to the above, you may also request local context from a user’s editor to further tailor responses. To do so, the **{% data variables.product.prodname_copilot_short %} Editor Context** permissions must be set to "Read-only". Users will be notified to provide the required authorization. - -For more information on {% data variables.product.prodname_github_app %} permissions, see [AUTOTITLE](/apps/creating-github-apps/registering-a-github-app/choosing-permissions-for-a-github-app). - -### Granting permissions to access organization resources - -Users with an individual {% data variables.product.prodname_copilot_short %} subscription can install and use {% data variables.copilot.copilot_extensions_short %}. Users with a {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} subscription need an organization administrator to enable this feature. - -Only organization administrators can grant permissions for {% data variables.copilot.copilot_extensions_short %} to access organization resources. - -To grant organization members access, the organization administrator must: - -* Install the extension -* Grant the extension permission to access specific repositories -* Authorize access for all, or specific repositories - -### Controlling access at the enterprise level - -If you are an enterprise administrator, you can disable {% data variables.copilot.copilot_extensions_short %} across your enterprise by setting the **{% data variables.copilot.copilot_extensions_short %}** policy to "Disabled". The "No Policy" setting allows organization administrators to set their own policy. - -No, there is no allowlist or blocklist at the enterprise level. - -## Sharing data with {% data variables.copilot.copilot_extensions_short %} - -The following data is shared when you interact with {% data variables.copilot.copilot_extensions_short %}: - -* Data attached to your account and {% data variables.copilot.copilot_chat_short %} usage, such as {% data variables.product.github %} user ID, and timestamps of messages. -* Past messages within the chat thread where you are invoking an extension. Only one extension can be used per thread, preventing data sharing across extensions. The data retention period for thread context is 30 days. -* Any additional organization and repository data that is authorized for the extension by your organization administrator. Administrators installing extensions must approve access to the required permissions prior to completing installation. -* For {% data variables.copilot.copilot_chat_dotcom_short %}, if your administrator has approved the extension to access repository or organization metadata, that data will be shared as well. - -## Further reading - -* [AUTOTITLE](/copilot/concepts/extensions/build-extensions) diff --git a/content/copilot/concepts/context/index.md b/content/copilot/concepts/context/index.md index fcd2299cccc1..1e46e81152e5 100644 --- a/content/copilot/concepts/context/index.md +++ b/content/copilot/concepts/context/index.md @@ -13,7 +13,6 @@ children: - /repository-indexing - /content-exclusion - /knowledge-bases - - /copilot-extensions contentType: concepts --- diff --git a/content/copilot/concepts/context/mcp.md b/content/copilot/concepts/context/mcp.md index e538ad7d86fc..373189bb65a0 100644 --- a/content/copilot/concepts/context/mcp.md +++ b/content/copilot/concepts/context/mcp.md @@ -10,6 +10,23 @@ topics: contentType: concepts redirect_from: - /copilot/concepts/about-mcp + - /copilot/concepts/extensions/agents + - /copilot/concepts/extensions/build-extensions + - /copilot/concepts/extensions/skillsets + - /copilot/concepts/extensions/openid-connect + - /copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/use-copilots-llm + - /copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/create-github-app + - /copilot/how-tos/use-copilot-extensions/build-copilot-skillsets + - /copilot/how-tos/use-copilot-extensions/debug-copilot-extension + - /copilot/how-tos/use-copilot-extensions/manage-extension-availability + - /copilot/how-tos/use-copilot-extensions/set-up-oidc + - /copilot/how-tos/provide-context/install-copilot-extensions + - /copilot/concepts/extensions + - /copilot/how-tos/use-copilot-extensions/create-a-copilot-extension + - /copilot/how-tos/use-copilot-extensions + - /copilot/concepts/context/copilot-extensions + - /copilot/reference/extensions-glossary + - /copilot/how-tos/use-copilot-extensions/build-a-copilot-agent category: - Learn about Copilot --- diff --git a/content/copilot/concepts/extensions/agents.md b/content/copilot/concepts/extensions/agents.md deleted file mode 100644 index 542055e06029..000000000000 --- a/content/copilot/concepts/extensions/agents.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: About agents for GitHub Copilot Extensions -shortTitle: Agents -intro: 'Learn what {% data variables.copilot.copilot_agents %} are and how they can enhance your {% data variables.copilot.copilot_chat %} experience.' -allowTitleToDifferFromFilename: true -versions: - feature: copilot-extensions -topics: - - Copilot -redirect_from: - - /copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/about-copilot-agents - - /copilot/concepts/build-copilot-extensions/agents-for-copilot-extensions - - /copilot/concepts/copilot-extensions/agents-for-copilot-extensions - - /copilot/concepts/copilot-extensions/agents -contentType: concepts -category: - - Learn about Copilot ---- - -{% data variables.copilot.copilot_agents_short %} are custom tools embedded in {% data variables.copilot.copilot_extensions_short %}. They integrate with {% data variables.copilot.copilot_chat_short %} to provide additional functionalities tailored to specific needs. {% data variables.copilot.copilot_agents_short %} can perform various tasks such as querying documentation, retrieving data, executing specific actions, or providing AI-assisted coding suggestions. They enhance the capabilities of {% data variables.product.prodname_copilot %} by allowing developers to build and integrate custom features directly into the {% data variables.copilot.copilot_chat_short %} interface. - -To use a {% data variables.copilot.copilot_agent_short %} in {% data variables.copilot.copilot_chat_short %}, it must be associated with a {% data variables.product.prodname_github_app %}. This combination of a {% data variables.product.prodname_github_app %} and a {% data variables.copilot.copilot_agent_short %} is what we refer to as a {% data variables.copilot.copilot_extension %}. For more information on {% data variables.copilot.copilot_extensions_short %}, see [AUTOTITLE](/copilot/concepts/copilot-extensions/about-copilot-extensions). - -Any {% data variables.product.company_short %} user can create a {% data variables.copilot.copilot_extension_short %} by building a {% data variables.copilot.copilot_agent_short %} and associating it with a {% data variables.product.prodname_github_app %}. For more information on creating a {% data variables.copilot.copilot_extension_short %}, see [AUTOTITLE](/copilot/building-copilot-extensions/setting-up-copilot-extensions). - -## Further reading - -* [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-the-copilot-platform) -* [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-github) diff --git a/content/copilot/concepts/extensions/build-extensions.md b/content/copilot/concepts/extensions/build-extensions.md deleted file mode 100644 index 6d1166f3acea..000000000000 --- a/content/copilot/concepts/extensions/build-extensions.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: About building GitHub Copilot Extensions -shortTitle: Build extensions -intro: Learn about developing {% data variables.copilot.copilot_extensions_short %}. -allowTitleToDifferFromFilename: true -product: '{% data reusables.gated-features.copilot-extensions %}' -versions: - feature: copilot-extensions -topics: - - Copilot -redirect_from: - - /copilot/building-copilot-extensions/about-building-copilot-extensions - - /copilot/concepts/build-copilot-extensions/about-building-copilot-extensions - - /copilot/concepts/copilot-extensions/about-building-copilot-extensions - - /copilot/concepts/extensions/about-extensions -contentType: concepts -category: - - Integrate Copilot with your tools ---- - - - - - -{% data reusables.copilot.copilot-extensions.extensions-retirement %} - - - -## About building {% data variables.copilot.copilot_extensions_short %} - -{% data reusables.copilot.copilot-extensions.about-copilot-extensions %} - -## About skillsets and agents - -{% data reusables.copilot.copilot-extensions.differences-between-agents-and-skillsets-1 %} -For more information about skillsets, see [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/about-copilot-skillsets). -{% data reusables.copilot.copilot-extensions.differences-between-agents-and-skillsets-2 %} - -## About context passing - -You can allow your {% data variables.copilot.copilot_extension_short %} to receive context from the editor, such as the currently opened file, by enabling the **Read-only** access level for the "{% data variables.product.prodname_copilot_short %} Editor Context" permission in your {% data variables.product.prodname_github_app %} settings. See step 10 of [Configuring your {% data variables.product.prodname_github_app %}](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-extension#configuring-your-github-app). - -The {% data variables.copilot.copilot_extensibility_platform %} automatically handles messaging when implicit and explicit context is unavailable or unauthorized. To enable context passing, you are required to request permissions from users. To enable context passing, you are required to: - -* Update your APIs to handle new reference types. -* Request permissions from users. When requesting permissions, follow these best practices: - * Clearly communicate what context you need and what you need it for. - * Implement appropriate error handling for unavailable context that your own application logic and API calls. - * If context is unavailable, provide value where possible without this data. - * Request only the minimum required permissions for your extension. - -Context passing respects content exclusions, which refers to any files listed in your context exclusion settings, including files that begin with `.`. - -For more information about context passing, see [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/context-passing-for-your-agent). - -## Using APIs in {% data variables.copilot.copilot_extensions %} - -Building {% data variables.copilot.copilot_extensions %} requires using the {% data variables.product.github %} API. Optionally, the {% data variables.product.prodname_copilot_short %} API can be used for additional capabilities. For details on request and response formatting, see the [OpenAI API documentation](https://platform.openai.com/docs/api-reference/chat). - -> [!NOTE] The {% data variables.product.prodname_copilot_short %} API is available for {% data variables.copilot.copilot_extension_short %} builders, but only {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_vscode_shortname %} Chat extensions can be used to access these endpoints. - -## Resources for building {% data variables.copilot.copilot_extensions %} - -{% data variables.product.company_short %} provides a comprehensive toolkit for extension builders, with code samples, a CLI debugging tool, quickstart SDKs, and a user feedback repository. For more information, see the [copilot-extensions](https://github.com/orgs/copilot-extensions/) organization on {% data variables.product.company_short %}. - -Before creating your own {% data variables.copilot.copilot_extension %} from scratch, you may want to explore an existing {% data variables.copilot.copilot_agent_short %}, then integrate it with a {% data variables.product.prodname_github_app %} to see how it works. {% data variables.product.company_short %} provides a few example {% data variables.copilot.copilot_agents_short %} that you can clone and use as the basis for your own {% data variables.copilot.copilot_extension %}: - -* **Blackbeard:** A simple {% data variables.copilot.copilot_agent_short %} that responds to requests like a pirate, using {% data variables.product.prodname_copilot_short %}'s LLM API and special system prompts. It is a good starting point for learning how to build a {% data variables.copilot.copilot_extension %}. For more information, see the [Blackbeard {% data variables.copilot.copilot_extension_short %}](https://github.com/copilot-extensions/blackbeard-extension). -* **{% data variables.product.prodname_github_models %}:** A more complex {% data variables.copilot.copilot_agent_short %} that lets you ask about and interact with various LLMs listed on the {% data variables.product.prodname_marketplace %} from within {% data variables.copilot.copilot_chat_short %}. For more information, see the [{% data variables.product.prodname_github_models %} {% data variables.copilot.copilot_extension_short %}](https://github.com/copilot-extensions/github-models-extension). - - > [!NOTE] {% data variables.product.prodname_github_models %} are in {% data variables.release-phases.public_preview %} and subject to change. - -* **Function calling:** an example agent written in Go that demonstrates function calling and confirmation dialogues. For more information, see the [Function calling extension](https://github.com/copilot-extensions/function-calling-extension). -* **RAG extension:** an example agent written in Go that demonstrates a simple implementation of retrieval augmented generation. For more information, see the [RAG extension](https://github.com/copilot-extensions/rag-extension). -* **Preview SDK:** An SDK that simplifies the process of building {% data variables.copilot.copilot_extensions %} by handling request verification, response formatting, and API interactions. It allows builders to focus on their extension's core functionality rather than boilerplate, by streamlining the integration of tools, APIs, and data sources into {% data variables.copilot.copilot_chat_short %}. For more information, see the [Preview SDK](https://github.com/copilot-extensions/preview-sdk.js). - -## About building {% data variables.copilot.copilot_vsc_chat_participants %} - -> [!NOTE] The {% data variables.product.github %} documentation focuses on building {% data variables.copilot.copilot_extensions %}, not {% data variables.copilot.copilot_vsc_chat_participants %}. - -You can build a {% data variables.copilot.copilot_extension_short %} that is exclusive and native to {% data variables.product.prodname_vscode %}, called a {% data variables.copilot.copilot_vsc_chat_participant %}. - -{% data variables.copilot.copilot_extensions %} and {% data variables.copilot.copilot_vsc_chat_participants %} use the same backend platform to route requests to extensions. Both provide similar end-user experiences, integrate with {% data variables.copilot.copilot_chat_short %}, and can leverage the {% data variables.product.prodname_copilot_short %} API or other LLMs. - -While they share similarities, below are several key differences: - -* {% data variables.copilot.copilot_extensions %} can be used in any editor where extensions are supported, while {% data variables.copilot.copilot_vsc_chat_participants %} are only available in {% data variables.product.prodname_vscode %}. -* {% data variables.copilot.copilot_extensions %} are server-side extensions, requiring server infrastructure to build. These extensions provide a built-in connection to your {% data variables.product.github %} workspaces, as set by your organization administrator. -* {% data variables.copilot.copilot_vsc_chat_participants %} are client-side extensions that have more access to {% data variables.product.prodname_vscode_shortname %}'s features and APIs, allowing more editor-specific interactions like accessing local workspace data, manipulating {% data variables.product.prodname_vscode %}'s interface, and read/write access to local files. They do not require server infrastructure. -* Because {% data variables.copilot.copilot_vsc_chat_participants %} are local to the user's machine, they cannot be controlled by the {% data variables.product.prodname_copilot_short %} policies of an organization or enterprise on {% data variables.product.prodname_dotcom_the_website %}. -* {% data variables.copilot.copilot_vsc_chat_participants %} are published to the {% data variables.product.prodname_vs_marketplace_shortname %}, not the {% data variables.product.prodname_marketplace %}. - -{% data variables.copilot.copilot_vsc_chat_participants %} are best suited for developers who want to build extensions that use {% data variables.product.prodname_vscode_shortname %}-specific APIs and functionality, or extend existing {% data variables.product.prodname_vscode_shortname %} extensions. - -For more information on {% data variables.copilot.copilot_vsc_chat_participants %}, see [Chat extensions](https://code.visualstudio.com/api/extension-guides/chat) in the {% data variables.product.prodname_vscode %} documentation. - -## Indemnity for {% data variables.copilot.copilot_extensions_short %} - -{% data variables.copilot.copilot_extensions_short %} are not covered by {% data variables.product.prodname_copilot %}’s indemnity policy. However, this exclusion applies only to issues that arise within extension chat threads. - -Installing and using extensions does not affect indemnity coverage for any issues that occur while using other {% data variables.product.prodname_copilot_short %} features such as code completion and chat. - -## Further reading - -* [AUTOTITLE](/copilot/building-copilot-extensions/copilot-extensions-glossary) diff --git a/content/copilot/concepts/extensions/index.md b/content/copilot/concepts/extensions/index.md deleted file mode 100644 index 18ebc2726af4..000000000000 --- a/content/copilot/concepts/extensions/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: GitHub Copilot Extensions -shortTitle: Extensions -intro: Understand components for building {% data variables.copilot.copilot_extensions_short %}. -versions: - feature: copilot -topics: - - Copilot -redirect_from: - - /copilot/concepts/build-copilot-extensions - - /copilot/concepts/copilot-extensions -children: - - /build-extensions - - /agents - - /skillsets - - /openid-connect -contentType: concepts ---- - diff --git a/content/copilot/concepts/extensions/openid-connect.md b/content/copilot/concepts/extensions/openid-connect.md deleted file mode 100644 index 47168fe03a6c..000000000000 --- a/content/copilot/concepts/extensions/openid-connect.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: OpenID Connect (OIDC) for GitHub Copilot Extensions -shortTitle: OpenID Connect -allowTitleToDifferFromFilename: true -intro: 'Learn how OpenID Connect (OIDC) enables {% data variables.copilot.copilot_extensions_short %} to securely authenticate users and access cloud resources without storing long-lived credentials.' -versions: - feature: copilot-extensions -topics: - - Copilot -redirect_from: - - /copilot/concepts/build-copilot-extensions/openid-connect - - /copilot/concepts/copilot-extensions/openid-connect -contentType: concepts -category: - - Integrate Copilot with your tools ---- - -## About OpenID Connect (OIDC) for {% data variables.copilot.copilot_extensions_short %} - -OpenID Connect (OIDC) allows {% data variables.copilot.copilot_extensions_short %} to exchange short-lived tokens directly from their cloud provider instead of storing long-lived {% data variables.product.github %} credentials. This feature enables both Copilot agents and skillsets to more securely authenticate users and access cloud resources. - -### Overview of OIDC - -{% data variables.copilot.copilot_extensions_short %} often need to access third-party resources or APIs on behalf of users. Traditionally, this required storing {% data variables.product.github %} tokens as secrets and making additional API calls to map these tokens to user identities in your system. With OIDC, your extension can request short-lived access tokens directly from your authentication service by exchanging {% data variables.product.github %} identity information. - -When enabled, {% data variables.product.github %}'s OIDC provider automatically generates a token containing claims about the user and the request context. Your authentication service can validate these claims and exchange them for an access token scoped specifically for your service. - -Using OIDC is especially valuable for {% data variables.product.prodname_copilot_short %} skillsets development because it allows you to leverage your existing API endpoints without maintaining separate {% data variables.product.github %}-specific endpoints. Instead of duplicating endpoints to accept {% data variables.product.github %} tokens, you can use OIDC to translate {% data variables.product.github %} identities into your service’s native authentication tokens. - -### Benefits of using OIDC - -By implementing OIDC token exchange in your {% data variables.copilot.copilot_extension_short %}, you can: - -* Avoid storing long-lived {% data variables.product.github %} tokens or maintain a mapping between {% data variables.product.github %} and your service's identities. -* Use short-lived tokens that automatically expire and can be scoped specifically to your service's needs. -* Avoid making additional calls to {% data variables.product.github %}'s API to validate tokens and fetch user information. -* Enable direct integration for {% data variables.product.prodname_copilot_short %} Skills with your existing APIs without maintaining separate endpoints for {% data variables.product.github %}. -* Reuse existing API endpoints by translating {% data variables.product.github %} authentication into your service's native tokens. - -## About token exchange flow - -The following outlines how the {% data variables.copilot.copilot_extensibility_platform_short %} exchanges an OIDC token for an access token to authenticate requests to your extension. - -### Initial request - -1. The user sends a message to your {% data variables.copilot.copilot_extension_short %}. -1. GitHub generates an OIDC token containing user identity information. -1. GitHub calls your token exchange endpoint with the OIDC token. -1. Your service validates the token and returns an access token. -1. GitHub includes your access token in the request to your extension. - -```http request -# HTTP header -Authorization: Bearer -X-GitHub-Token: -``` - -### Subsequent requests - -1. {% data variables.product.github %} caches your access token for up to 10 minutes. -1. The cached token is reused for subsequent requests. -1. If the token expires or becomes invalid, {% data variables.product.github %} requests a new one. - -## Understanding OIDC tokens - -The OIDC token from {% data variables.product.github %} is a JWT containing claims about the user and request context: - -```json -{ - "jti": "", - "sub": "", - "aud": "", - "iss": "https://github.com/login/oauth", - "nbf": 1632492967, - "exp": 1632493867, - "iat": 1632493567, - "act": { - "sub": "api.copilotchat.com" - } -} -``` - -## Best practices - -* Scope tokens to the minimum required permissions. -* Implement proper error handling and logging. -* Monitor token exchange patterns for security anomalies. -* Keep tokens short-lived to minimize security risks. -* Validate all claims before issuing access tokens. -* Consider implementing rate limiting on your token exchange endpoint. -* Use HTTPS for all token exchange communications. - -## Next steps - -* [AUTOTITLE](/copilot/how-tos/build-copilot-extensions/set-up-oidc) diff --git a/content/copilot/concepts/extensions/skillsets.md b/content/copilot/concepts/extensions/skillsets.md deleted file mode 100644 index 9d41d94683f6..000000000000 --- a/content/copilot/concepts/extensions/skillsets.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: About skillsets for GitHub Copilot Extensions -shortTitle: Skillsets -allowTitleToDifferFromFilename: true -intro: 'Learn what {% data variables.copilot.copilot_skillsets %} are and how they simplify integrating third-party tools and functions into your {% data variables.product.prodname_copilot_short %} experience.' -versions: - feature: copilot-extensions -topics: - - Copilot -redirect_from: - - /copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/about-copilot-skillsets - - /copilot/concepts/build-copilot-extensions/skillsets-for-copilot-extensions - - /copilot/concepts/copilot-extensions/skillsets-for-copilot-extensions - - /copilot/concepts/copilot-extensions/skillsets -contentType: concepts -category: - - Integrate Copilot with your tools ---- - -A skill within {% data variables.product.prodname_copilot %} is a tool that the model calls to perform a specific task in response to a user query. A skillset is a collection of these skills (up to five per skillset). {% data variables.copilot.copilot_skillsets %} provide a streamlined way to extend {% data variables.product.prodname_copilot_short %}’s functionality, allowing builders to integrate external services or custom API endpoints into their {% data variables.product.prodname_copilot_short %} workflow. With skillsets, builders can enable {% data variables.product.prodname_copilot_short %} to perform tasks—such as retrieving data or executing actions in third-party services—without needing to manage complex workflows or architecture. - -For a quickstart example of a skillset, see the [skillset-example](https://github.com/copilot-extensions/skillset-example) repository. For information on building a skillset, see [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/building-copilot-skillsets). - -## How skillsets and agents differ - -{% data reusables.copilot.copilot-extensions.differences-between-agents-and-skillsets-1 %} -{% data reusables.copilot.copilot-extensions.differences-between-agents-and-skillsets-2 %} - -## The extensibility platform - -Skillsets and agents both operate on the {% data variables.copilot.copilot_extensibility_platform %}, which manages the flow of user requests and function evaluations. With {% data variables.copilot.copilot_skillsets_short %}, the platform handles routing, prompt crafting, function calls and prompt generation. - -### Workflow overview - -The extensibility platform follows a structured workflow to process user requests and generate responses: - -1. **User request** -A user issues a request in the {% data variables.copilot.copilot_chat_short %} interface, such as asking for data or executing a specific action. - -1. **Routing** -The request is routed to the appropriate extension. For skillsets, this means the platform agent identifies and invokes the corresponding skillset based on the user’s intent. Each skill’s inference description helps the platform determine which skill to call. - -1. **Dynamic Prompt Crafting** -{% data variables.product.prodname_copilot %} generates a prompt using: - * The user’s query. - * Relevant thread history. - * Available functions within the skillset. - * Results from any prior function calls. - -1. **LLM Completion** -The language model (LLM) processes the prompt and determines: - * Whether the user’s intent matches a skillset function. - * Which function(s) to call and with what arguments. - * If required, the LLM may send additional function calls to gather more context. - -1. **Function Evaluation** -The extension invokes the selected function(s), which may involve: - * Gathering relevant context, such as {% data variables.copilot.copilot_skillsets_short %} repository or user metadata. - * Making an API call to an external service to retrieve data or execute an action. - -1. **Response generation** -The platform iteratively refines the output, looping through prompt crafting, LLM completion, and function evaluation as needed. Once the process is complete, {% data variables.product.prodname_copilot_short %} streams a final response back to the user in the chat interface. diff --git a/content/copilot/concepts/index.md b/content/copilot/concepts/index.md index c8ffc4f1b3ec..119630fff292 100644 --- a/content/copilot/concepts/index.md +++ b/content/copilot/concepts/index.md @@ -20,7 +20,6 @@ children: - /about-enterprise-accounts-for-copilot-business - /policies - /network-settings - - /extensions - /copilot-metrics contentType: concepts --- diff --git a/content/copilot/get-started/features.md b/content/copilot/get-started/features.md index 72bf3053cc16..fc278e2dc28a 100644 --- a/content/copilot/get-started/features.md +++ b/content/copilot/get-started/features.md @@ -51,10 +51,6 @@ AI-generated summaries of the changes that were made in a pull request, which fi AI-generated text completion to help you write pull request descriptions quickly and accurately. See [AUTOTITLE](/copilot/using-github-copilot/using-copilot-text-completion). -### {% data variables.copilot.copilot_extensions_short %} - -{% data reusables.copilot.copilot-extensions.copilot-extensions-intro %} See [AUTOTITLE](/copilot/concepts/copilot-extensions/about-copilot-extensions). - ### {% data variables.copilot.copilot_edits_short %} {% data variables.copilot.copilot_edits_short %} is available in {% data variables.product.prodname_vscode %}, {% data variables.product.prodname_vs %}, and JetBrains IDEs. {% data reusables.copilot.copilot-edits.about-copilot-edits %} diff --git a/content/copilot/how-tos/administer-copilot/configure-mcp-server-access.md b/content/copilot/how-tos/administer-copilot/configure-mcp-server-access.md index 58b270c1c3c2..bf00998c76fa 100644 --- a/content/copilot/how-tos/administer-copilot/configure-mcp-server-access.md +++ b/content/copilot/how-tos/administer-copilot/configure-mcp-server-access.md @@ -10,11 +10,14 @@ topics: - Copilot - Enterprise shortTitle: Configure MCP server access +redirect_from: + - /copilot/how-tos/administer-copilot/manage-for-organization/set-extension-permissions contentType: how-tos category: - Manage Copilot for a team --- + > [!NOTE] > The MCP registry URL and allowlist are in {% data variables.release-phases.public_preview %} and subject to change. diff --git a/content/copilot/how-tos/administer-copilot/manage-for-organization/index.md b/content/copilot/how-tos/administer-copilot/manage-for-organization/index.md index 786c0268a20c..cf12c72d3ea9 100644 --- a/content/copilot/how-tos/administer-copilot/manage-for-organization/index.md +++ b/content/copilot/how-tos/administer-copilot/manage-for-organization/index.md @@ -18,7 +18,6 @@ children: - /manage-policies - /add-copilot-coding-agent - /prepare-for-custom-agents - - /set-extension-permissions - /review-activity contentType: how-tos --- diff --git a/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-policies.md b/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-policies.md index 5f8f95c07e5f..af7f21c89afa 100644 --- a/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-policies.md +++ b/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-policies.md @@ -54,5 +54,4 @@ If your organization has a {% data variables.copilot.copilot_business_short %} o * [{% data variables.product.prodname_copilot %} Trust Center](https://copilot.github.trust.page) * [AUTOTITLE](/copilot/using-github-copilot/finding-public-code-that-matches-github-copilot-suggestions) -* [AUTOTITLE](/copilot/how-tos/administer/organizations/set-extension-permissions) * [AUTOTITLE](/enterprise-cloud@latest/copilot/setting-up-github-copilot/setting-up-github-copilot-for-your-enterprise) diff --git a/content/copilot/how-tos/administer-copilot/manage-for-organization/set-extension-permissions.md b/content/copilot/how-tos/administer-copilot/manage-for-organization/set-extension-permissions.md deleted file mode 100644 index 5bfaa292b1f9..000000000000 --- a/content/copilot/how-tos/administer-copilot/manage-for-organization/set-extension-permissions.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Setting permissions for a GitHub Copilot extension in your organization -intro: 'Learn how to control access to {% data variables.copilot.copilot_extensions %}.' -permissions: Organization owners -product: 'Organizations with a {% data variables.copilot.copilot_for_business %} or {% data variables.copilot.copilot_enterprise %} plan' -versions: - feature: copilot-extensions -allowTitleToDifferFromFilename: true -topics: - - Copilot - - Organizations - - Permissions -shortTitle: Set extension permissions -redirect_from: - - /copilot/how-tos/administer/organizations/set-extension-permissions - - /copilot/how-tos/administer/manage-for-organization/set-extension-permissions -contentType: how-tos -category: - - Manage Copilot for a team ---- - -{% data variables.copilot.copilot_extensions %} integrate external tools with {% data variables.copilot.copilot_chat %}. See [AUTOTITLE](/copilot/concepts/copilot-extensions/about-copilot-extensions). - -## Prerequisites - -* Set a usage policy to enable or disable {% data variables.copilot.copilot_extensions_short %} for all users granted a {% data variables.product.prodname_copilot_short %} license by your organization, controlling your security risk. See [AUTOTITLE](/copilot/how-tos/administer/organizations/managing-policies-for-copilot-in-your-organization). -* Install a {% data variables.copilot.copilot_extension_short %} in your organization. See [AUTOTITLE](/copilot/how-tos/context/install-copilot-extensions/extending-the-capabilities-of-github-copilot-in-your-organization). - -## Managing permissions for a {% data variables.copilot.copilot_extension %} in your organization - -After you have installed a {% data variables.copilot.copilot_extension_short %} in your organization, you can view the permissions the extension has in your organization, and why those permissions are necessary. If you do not want the {% data variables.copilot.copilot_extension_short %} to have the listed permissions, you can suspend or uninstall the extension. - -{% data reusables.profile.access_org %} -{% data reusables.profile.org_settings %} -{% data reusables.apps.access-org-app-settings %} -1. Optionally, to filter your installed {% data variables.product.prodname_github_apps %} for {% data variables.copilot.copilot_extensions_short %}, select the **Filter:** dropdown menu, then click **{% data variables.copilot.copilot_extensions_short %}**. -1. Next to the {% data variables.copilot.copilot_extension_short %} you want to review or modify, click **Configure**. -1. In the "Permissions" section, review the permissions listed for the {% data variables.copilot.copilot_extension_short %}. Optionally, you can block the {% data variables.copilot.copilot_extension_short %}'s access to your organization in one of two ways: - * To indefinitely suspend the {% data variables.copilot.copilot_extension_short %}'s access to resources in your organization while keeping the extension installed, in the "Danger zone" section, click **Suspend**. - * To uninstall a {% data variables.copilot.copilot_extension_short %} completely, in the "Danger zone" section, click **Uninstall**. - -## Further reading - -* [{% data variables.product.prodname_copilot %} Trust Center](https://copilot.github.trust.page) -* [AUTOTITLE](/copilot/how-tos/context/install-copilot-extensions/using-extensions-to-integrate-external-tools-with-copilot-chat) -* [AUTOTITLE](/copilot/concepts/copilot-extensions/about-copilot-extensions) diff --git a/content/copilot/how-tos/chat-with-copilot/chat-in-ide.md b/content/copilot/how-tos/chat-with-copilot/chat-in-ide.md index 3be722ce11c3..4ca79db38f01 100644 --- a/content/copilot/how-tos/chat-with-copilot/chat-in-ide.md +++ b/content/copilot/how-tos/chat-with-copilot/chat-in-ide.md @@ -68,10 +68,6 @@ Alternatively, you can manually specify a chat participant to scope your prompt For a list of available chat participants, type `@` in the chat prompt box. See also [AUTOTITLE](/copilot/using-github-copilot/github-copilot-chat-cheat-sheet?tool=vscode#chat-participants) or [Chat participants](https://code.visualstudio.com/docs/copilot/copilot-chat#_chat-participants) in the {% data variables.product.prodname_vscode %} documentation. -### {% data variables.copilot.copilot_extensions_short %} chat participants - -You can also install {% data variables.copilot.copilot_extensions_short %} that provide chat participants. You can install these extensions from [{% data variables.product.prodname_marketplace %}](https://github.com/marketplace?type=apps&copilot_app=true) and from [{% data variables.product.prodname_vscode_marketplace %}](https://marketplace.visualstudio.com/search?target=VSCode&category=Chat&sortBy=Installs). For information about extensions from {% data variables.product.prodname_marketplace %} that provide chat participants, see [AUTOTITLE](/copilot/github-copilot-chat/github-copilot-extensions/about-github-copilot-extensions). - ### Slash commands Use slash commands to avoid writing complex prompts for common scenarios. To use a slash command, type `/` in the chat prompt box, followed by a command. @@ -105,6 +101,10 @@ You can tell {% data variables.product.prodname_copilot_short %} to answer a que {% endif %} +## Using Model Context Protocol (MCP) servers + +{% data reusables.copilot.mcp.mcp-chat-in-ide %} + ## AI models for {% data variables.copilot.copilot_chat_short %} {% data reusables.copilot.change-the-ai-model %} @@ -227,10 +227,6 @@ You can ask {% data variables.copilot.copilot_chat_short %} to give you code sug You can use special keywords to help {% data variables.product.prodname_copilot_short %} understand your prompt. -### Extending {% data variables.copilot.copilot_chat_short %} - -{% data reusables.copilot.copilot-extensions.extending-copilot-chat %} - ### Slash commands Use slash commands to avoid writing complex prompts for common scenarios. To use a slash command, type `/` in the chat prompt box, followed by a command. @@ -272,6 +268,10 @@ You can tell {% data variables.product.prodname_copilot_short %} to answer a que {% endif %} +## Using Model Context Protocol (MCP) servers + +{% data reusables.copilot.mcp.mcp-chat-in-ide %} + ## AI models for {% data variables.copilot.copilot_chat_short %} {% data reusables.copilot.change-the-ai-model %} @@ -375,6 +375,12 @@ You can ask {% data variables.copilot.copilot_chat_short %} to give you code sug You can use special keywords to help {% data variables.product.prodname_copilot_short %} understand your prompt. +### Chat participants + +Chat participants are like domain experts who have a specialty that they can help you with. You can use a chat participant to scope your prompt to a specific domain. To do this, type `@` in the chat prompt box, followed by a chat participant name. + +For a list of available chat participants, type `@` in the chat prompt box. See also [AUTOTITLE](/copilot/using-github-copilot/github-copilot-chat-cheat-sheet?tool=jetbrains#chat-participants-1). + ### Extending {% data variables.copilot.copilot_chat_short %} {% data reusables.copilot.copilot-extensions.extending-copilot-chat %} @@ -393,6 +399,10 @@ By default, {% data variables.copilot.copilot_chat_short %} will reference the f {% data reusables.copilot.using-skills %} +## Using Model Context Protocol (MCP) servers + +{% data reusables.copilot.mcp.mcp-chat-in-ide %} + ## AI models for {% data variables.copilot.copilot_chat_short %} {% data reusables.copilot.change-the-ai-model %} @@ -483,6 +493,10 @@ You can ask {% data variables.copilot.copilot_chat_short %} to give you code sug To see the files that {% data variables.copilot.copilot_chat_short %} used to generate the response, click the **References** link below the response. The references may include a link to a custom instructions file for your repository. This file contains additional information that is automatically added to all of your chat questions to improve the quality of the responses. For more information, see [AUTOTITLE](/copilot/how-tos/custom-instructions/adding-repository-custom-instructions-for-github-copilot). +## Using Model Context Protocol (MCP) servers + +{% data reusables.copilot.mcp.mcp-chat-in-ide %} + ## AI models for {% data variables.copilot.copilot_chat_short %} {% data reusables.copilot.change-the-ai-model %} @@ -567,6 +581,10 @@ Use slash commands to avoid writing complex prompts for common scenarios. To use To see all available slash commands, type `/` in the chat prompt box. +## Using Model Context Protocol (MCP) servers + +{% data reusables.copilot.mcp.mcp-chat-in-ide %} + ## AI models for {% data variables.copilot.copilot_chat_short %} {% data reusables.copilot.change-the-ai-model %} diff --git a/content/copilot/how-tos/index.md b/content/copilot/how-tos/index.md index 4f4655bedcea..33f4ee2caa27 100644 --- a/content/copilot/how-tos/index.md +++ b/content/copilot/how-tos/index.md @@ -21,7 +21,6 @@ children: - /manage-your-account - /administer-copilot - /troubleshoot-copilot - - /use-copilot-extensions redirect_from: - /copilot/using-github-copilot contentType: how-tos diff --git a/content/copilot/how-tos/provide-context/index.md b/content/copilot/how-tos/provide-context/index.md index 7af9e7085411..46bb578eb024 100644 --- a/content/copilot/how-tos/provide-context/index.md +++ b/content/copilot/how-tos/provide-context/index.md @@ -11,7 +11,6 @@ children: - /use-mcp - /create-knowledge-bases - /use-knowledge-bases - - /install-copilot-extensions redirect_from: - /copilot/customizing-copilot - /copilot/how-tos/context diff --git a/content/copilot/how-tos/provide-context/install-copilot-extensions/index.md b/content/copilot/how-tos/provide-context/install-copilot-extensions/index.md deleted file mode 100644 index 427564269d61..000000000000 --- a/content/copilot/how-tos/provide-context/install-copilot-extensions/index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install GitHub Copilot Extensions -shortTitle: Install Copilot Extensions -intro: 'You can interact with external tools and add additional functionality to {% data variables.product.prodname_copilot_short %}.' -versions: - feature: copilot -topics: - - Copilot -children: - - /use-copilot-extensions - - /install-personal-extensions - - /install-extensions -redirect_from: - - /copilot/how-tos/context/install-copilot-extensions -contentType: how-tos ---- - diff --git a/content/copilot/how-tos/provide-context/install-copilot-extensions/install-extensions.md b/content/copilot/how-tos/provide-context/install-copilot-extensions/install-extensions.md deleted file mode 100644 index 7523a24551db..000000000000 --- a/content/copilot/how-tos/provide-context/install-copilot-extensions/install-extensions.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Extending the capabilities of GitHub Copilot in your organization -shortTitle: Install extensions -intro: 'You can add additional functionality to {% data variables.product.prodname_copilot_short %} in your organization, by installing certain {% data variables.product.prodname_github_apps %} from {% data variables.product.prodname_marketplace %}.' -product: 'Organization owners can install {% data variables.copilot.copilot_extensions %} for an organization.' -versions: - feature: copilot-extensions -topics: - - Copilot -redirect_from: - - /copilot/managing-copilot/managing-github-copilot-in-your-organization/customizing-copilot-for-your-organization/extending-the-capabilities-of-github-copilot-in-your-organization - - /copilot/managing-copilot/managing-github-copilot-in-your-organization/enhancing-copilot-for-your-organization/extending-the-capabilities-of-github-copilot-in-your-organization - - /copilot/github-copilot-chat/github-copilot-extensions/installing-github-copilot-extensions-for-your-organization - - /copilot/managing-copilot/managing-github-copilot-in-your-organization/managing-github-copilot-features-in-your-organization/installing-github-copilot-extensions-for-your-organization - - /copilot/managing-copilot/managing-github-copilot-in-your-organization/enhancing-copilot-for-your-organization/installing-github-copilot-extensions-for-your-organization - - /copilot/customizing-copilot/extending-the-capabilities-of-github-copilot-in-your-organization - - /copilot/how-tos/context/install-copilot-extensions/extending-the-capabilities-of-github-copilot-in-your-organization - - /copilot/how-tos/context/install-copilot-extensions/install-extensions -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -## About {% data variables.copilot.copilot_extensions %} for your organization - -{% data reusables.copilot.copilot-extensions.copilot-extensions-on-marketplace %} - -Any organization owner can install {% data variables.copilot.copilot_extensions_short %} for their organization, but your organization must have an active {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} plan. - -> [!NOTE] Anyone can install a {% data variables.copilot.copilot_extension_short %} on their personal account. However, if they get access to {% data variables.product.prodname_copilot_short %} through a {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} plan, they will only be able to use the extension if it is installed at the organization level. - -You can also create your own custom {% data variables.copilot.copilot_extensions_short %} for your organization. For more information, see [AUTOTITLE](/copilot/concepts/copilot-extensions/about-copilot-extensions). - -## Prerequisites - -Before you install any {% data variables.copilot.copilot_extensions_short %} in your organization, you should set a usage policy for {% data variables.copilot.copilot_extensions_short %} at the {% ifversion ghec %}enterprise or {% endif %}organization level. See [AUTOTITLE](/copilot/github-copilot-chat/github-copilot-extensions/managing-github-copilot-extensions). - -## Installing {% data variables.copilot.copilot_extensions %} for your organization - -1. Open [{% data variables.product.prodname_marketplace %}](https://github.com/marketplace?type=apps&copilot_app=true). -1. In the left sidebar, click **{% octicon "copilot" aria-hidden="true" aria-label="copilot" %} {% data variables.product.prodname_copilot_short %}**. -1. In the list of {% data variables.copilot.copilot_extensions_short %}, locate an app you'd like to install. -1. To install the {% data variables.copilot.copilot_extension_short %} on an organization with a {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} plan, see [AUTOTITLE](/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-organizations). -{% data reusables.copilot.copilot-extensions.extension-specific-onboarding-steps %} - -## Next steps - -After installing a {% data variables.copilot.copilot_extension_short %} for your organization, developers in your organization can start using the extension. See [AUTOTITLE](/copilot/github-copilot-chat/github-copilot-extensions/using-github-copilot-extensions). - -You can also manage the permissions of installed {% data variables.copilot.copilot_extensions_short %}. See [AUTOTITLE](/copilot/managing-copilot/managing-github-copilot-in-your-organization/setting-policies-for-copilot-in-your-organization/managing-policies-for-copilot-in-your-organization#managing-permissions-for-a-github-copilot-extension-in-your-organization). - -## Further reading - -* [AUTOTITLE](/copilot/customizing-copilot/extending-copilot-chat-with-mcp) -* [AUTOTITLE](/copilot/using-github-copilot/coding-agent/extending-copilot-coding-agent-with-mcp) diff --git a/content/copilot/how-tos/provide-context/install-copilot-extensions/install-personal-extensions.md b/content/copilot/how-tos/provide-context/install-copilot-extensions/install-personal-extensions.md deleted file mode 100644 index 1b5cfaec25ae..000000000000 --- a/content/copilot/how-tos/provide-context/install-copilot-extensions/install-personal-extensions.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Extending the capabilities of GitHub Copilot in your personal account -shortTitle: Install personal extensions -intro: 'You can add additional functionality to {% data variables.product.prodname_copilot_short %} in your personal account, by installing certain {% data variables.product.prodname_github_apps %} from {% data variables.product.prodname_marketplace %}.' -versions: - feature: copilot-extensions -topics: - - Copilot -redirect_from: - - /copilot/github-copilot-chat/github-copilot-extensions/installing-github-copilot-extensions-for-your-personal-account - - /copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/installing-github-copilot-extensions-for-your-personal-account - - /copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/extending-the-capabilities-of-github-copilot-in-your-personal-account - - /copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/managing-your-copilot-plan/extending-the-capabilities-of-github-copilot-in-your-personal-account - - /copilot/how-tos/context/install-copilot-extensions/extending-the-capabilities-of-github-copilot-in-your-personal-account - - /copilot/how-tos/context/install-copilot-extensions/install-personal-extensions -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -## About {% data variables.copilot.copilot_extensions %} for your personal account - -{% data reusables.copilot.copilot-extensions.copilot-extensions-on-marketplace %} - -Anyone can install {% data variables.copilot.copilot_extensions_short %} for their personal account, but you must set up {% data variables.copilot.copilot_free_short %}, or have an active {% data variables.copilot.copilot_pro_short %} or {% data variables.copilot.copilot_pro_plus_short %} plan, to use a {% data variables.copilot.copilot_extension_short %} you install. - -> [!NOTE] If you have access to {% data variables.product.prodname_copilot_short %} through a {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} plan, {% data variables.copilot.copilot_extensions_short %} are installed by organization owners at the organization level, and you do not need to install the extension on your personal account. To start using {% data variables.copilot.copilot_extensions_short %} installed in your organization, see [AUTOTITLE](/copilot/github-copilot-chat/github-copilot-extensions/using-github-copilot-extensions). - -You can also create your own custom {% data variables.copilot.copilot_extensions_short %} for your personal account. For more information, see [AUTOTITLE](/copilot/concepts/copilot-extensions/about-copilot-extensions). - -## Installing {% data variables.copilot.copilot_extensions %} for your personal account - -1. Open [{% data variables.product.prodname_marketplace %}](https://github.com/marketplace?type=apps&copilot_app=true). -1. In the left sidebar, click **{% octicon "copilot" aria-hidden="true" aria-label="copilot" %} {% data variables.product.prodname_copilot_short %}**. -1. In the list of {% data variables.copilot.copilot_extensions_short %}, locate an app you'd like to install. -1. To install the {% data variables.copilot.copilot_extension_short %} on your personal account, see [AUTOTITLE](/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-personal-account#installing-a-github-app-in-your-personal-account). -{% data reusables.copilot.copilot-extensions.extension-specific-onboarding-steps %} - -## Next steps - -After installing a {% data variables.copilot.copilot_extension_short %}, you can start using the extension in {% data variables.copilot.copilot_chat_short %}. See [AUTOTITLE](/copilot/github-copilot-chat/github-copilot-extensions/using-github-copilot-extensions). diff --git a/content/copilot/how-tos/provide-context/install-copilot-extensions/use-copilot-extensions.md b/content/copilot/how-tos/provide-context/install-copilot-extensions/use-copilot-extensions.md deleted file mode 100644 index 9cade98b6242..000000000000 --- a/content/copilot/how-tos/provide-context/install-copilot-extensions/use-copilot-extensions.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Using extensions to integrate external tools with GitHub Copilot Chat -intro: 'You can use {% data variables.copilot.copilot_extensions_short %} to interact with external tools in {% data variables.copilot.copilot_chat %}.' -product: '{% data reusables.gated-features.copilot-extensions %}' -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Use Copilot Extensions -redirect_from: - - /copilot/github-copilot-chat/github-copilot-extensions/about-github-copilot-extensions - - /copilot/github-copilot-chat/github-copilot-extensions/using-github-copilot-extensions - - /copilot/github-copilot-chat/github-copilot-extensions - - /copilot/using-github-copilot/using-extensions-to-integrate-external-tools-with-copilot-chat - - /copilot/how-tos/context/install-copilot-extensions/using-extensions-to-integrate-external-tools-with-copilot-chat - - /copilot/how-tos/context/install-copilot-extensions/use-copilot-extensions -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - - - - - -{% data reusables.copilot.copilot-extensions.extensions-retirement %} - - - -## About {% data variables.copilot.copilot_extensions %} - -{% data reusables.copilot.copilot-extensions.copilot-extensions-intro %} - -> [!NOTE] {% data variables.copilot.copilot_extensions %} are not the same as _the {% data variables.product.prodname_copilot %} extension_, which you install in your IDE to use default {% data variables.product.prodname_copilot_short %} functionality like code completion and {% data variables.copilot.copilot_chat %}. For more information on _the {% data variables.product.prodname_copilot %} extension_, see [AUTOTITLE](/copilot/managing-copilot/configure-personal-settings/installing-the-github-copilot-extension-in-your-environment). - -You can get started with {% data variables.copilot.copilot_extensions_short %} in one of two ways: -* Build your own {% data variables.copilot.copilot_extension_short %}. See [AUTOTITLE](/copilot/concepts/copilot-extensions/about-copilot-extensions). -* Install a {% data variables.copilot.copilot_extension_short %} from {% data variables.product.prodname_marketplace %}. - -You can interact with your custom-built or installed extension in a {% data variables.copilot.copilot_chat_short %} conversation, asking questions and performing actions that combine the capabilities of the external tool and {% data variables.product.prodname_dotcom %}. For example, if you install the Sentry extension for {% data variables.product.prodname_copilot %}, you can use the extension to get information about Sentry issues, then create and assign related tracking issues on {% data variables.product.prodname_dotcom %}. - -{% data variables.copilot.copilot_extensions_short %} provide several benefits, including: - -* Interaction with external tools using natural language -* Reduced context switching -* Customization of your {% data variables.copilot.copilot_chat_short %} experience for your developer flow - -{% data variables.copilot.copilot_extensions_short %} are included in all {% data variables.product.prodname_copilot_short %} subscriptions. - -### Supported clients and IDEs - -{% data reusables.copilot.copilot-extensions.supported-clients-and-ides-table %} - -## Prerequisites - -**If you have a {% data variables.copilot.copilot_pro_short %} subscription**, you need to install a {% data variables.copilot.copilot_extension_short %} before you can use the extension in {% data variables.copilot.copilot_chat_short %}. See [AUTOTITLE](/copilot/github-copilot-chat/github-copilot-extensions/installing-github-copilot-extensions-for-your-personal-account). - -**If you have access to {% data variables.product.prodname_copilot_short %} through a {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} subscription:** - 1. An organization owner or enterprise owner needs to enable the {% data variables.copilot.copilot_extensions_short %} policy for your organization or enterprise. See [AUTOTITLE](/copilot/managing-copilot/managing-github-copilot-in-your-organization/setting-policies-for-copilot-in-your-organization/managing-policies-for-copilot-in-your-organization#setting-a-policy-for-github-copilot-extensions-in-your-organization) and [AUTOTITLE](/enterprise-cloud@latest/copilot/managing-copilot/managing-copilot-for-your-enterprise/managing-policies-and-features-for-copilot-in-your-enterprise#configuring-policies-for-github-copilot) in the {% data variables.product.prodname_ghe_cloud %} documentation. - 1. An organization owner needs to install {% data variables.copilot.copilot_extensions_short %} for your organization. See [AUTOTITLE](/copilot/github-copilot-chat/github-copilot-extensions/installing-github-copilot-extensions-for-your-organization). - -## Using {% data variables.copilot.copilot_extensions %} - -1. To start using a {% data variables.copilot.copilot_extension_short %}, open a supported {% data variables.copilot.copilot_chat_short %} interface. See [Supported clients and IDEs](#supported-clients-and-ides). -1. To see a list of all {% data variables.copilot.copilot_extensions_short %} available in your {% data variables.copilot.copilot_chat_short %} conversation, in the {% data variables.copilot.copilot_chat_short %} text box, type `@`. - - > [!NOTE] If you are using {% data variables.copilot.copilot_chat_short %} in an IDE, and you or your organization owner install a {% data variables.copilot.copilot_extension_short %} while your IDE is open, you need to restart your IDE to begin using the {% data variables.copilot.copilot_extension_short %}. - -1. In the list of available {% data variables.copilot.copilot_extensions_short %}, click the one you want to use. -1. To begin interacting with the {% data variables.copilot.copilot_extension_short %}, in the {% data variables.copilot.copilot_chat_short %} text box, ask the extension to answer a question or perform an action, then press Enter. For each new request, be sure to include `@EXTENSION-NAME` at the beginning of your sentence. - * If you did not install the {% data variables.copilot.copilot_extension_short %} yourself, and it is your first time using the {% data variables.copilot.copilot_extension_short %}, you will be asked to authorize the extension. See [AUTOTITLE](/apps/using-github-apps/authorizing-github-apps). - * If you ask a {% data variables.copilot.copilot_extension_short %} to perform an action, you need to confirm the extension has your permission to act on your behalf before it will complete the task. After carefully reviewing the proposed action, in the confirmation dialog, click **Allow** or **Dismiss**. - -## Tips for using {% data variables.copilot.copilot_extensions %} - -* When you are using a {% data variables.copilot.copilot_extension_short %}, consider how you would interact with the tool outside of {% data variables.copilot.copilot_chat_short %}, then use natural language to ask questions and assign tasks that integrate the capabilities of the tool with {% data variables.product.prodname_dotcom %}. For example, [Sentry](https://sentry.io/welcome/) is an application monitoring software with a {% data variables.copilot.copilot_extension_short %}. The following are some example prompts for the Sentry extension for {% data variables.product.prodname_copilot %}: - * `@sentry list my most recent issues` - * `@sentry tell me more about issue ISSUE-ID-OR-ISSUE-LINK` - * `@sentry create a {% data variables.product.prodname_dotcom %} issue for the most recent Sentry issue and assign it to @DEVELOPER` - - For information on the best ways to use a specific {% data variables.copilot.copilot_extension_short %}, read the description of the extension on [{% data variables.product.prodname_marketplace %}](https://github.com/marketplace?type=apps&copilot_app=true). -* Interactions with one {% data variables.copilot.copilot_extension_short %} will never be shared with another {% data variables.copilot.copilot_extension_short %}. To interact with different {% data variables.copilot.copilot_extensions_short %} in an IDE, change the `@EXTENSION-NAME` at the beginning of each sentence. Interactions with different extensions will appear in the same {% data variables.copilot.copilot_chat_short %} window, but the conversations themselves are automatically separated. - - {% ifversion ghec %} To interact with different {% data variables.copilot.copilot_extensions_short %} on {% data variables.product.prodname_dotcom_the_website %}, you need to start a new conversation for each extension by clicking {% octicon "plus" aria-label="New conversation" %} at the top of the {% data variables.copilot.copilot_chat_short %} window.{% endif %} - -## Additional resources - -For questions and issues related to {% data variables.copilot.copilot_extensions %}, please use the following resources: - -* **General issues for users and builders:** Visit the [{% data variables.product.github %} Support Portal](https://support.github.com/). -* **Requests or feedback for {% data variables.product.github %}:** Use the [{% data variables.product.github %} Community Discussion Thread](https://gh.io/community-feedback). -* **Requests or feedback for third-party extension publishers:** File an issue in the [User Feedback Repo](https://github.com/copilot-extensions/user-feedback) and add a label with the extension's slug name. -* **{% data variables.product.github %} Technology Partners:** Email the partnerships team directly for assistance. -* **{% data variables.copilot.copilot_vsc_chat_participants %}:** For more information on this type of {% data variables.copilot.copilot_extension_short %}, see [Chat extensions](https://code.visualstudio.com/api/extension-guides/chat) in the {% data variables.product.prodname_vscode %} documentation. - -> [!NOTE] {% data variables.contact.github_support %} is not able to answer questions regarding {% data variables.copilot.copilot_vsc_chat_participants %}, as this implementation path is owned and maintained by the {% data variables.product.prodname_vscode_shortname %} team. - -## Further reading - -* [AUTOTITLE](/copilot/concepts/copilot-extensions/about-copilot-extensions) diff --git a/content/copilot/how-tos/provide-context/use-mcp/set-up-the-github-mcp-server.md b/content/copilot/how-tos/provide-context/use-mcp/set-up-the-github-mcp-server.md index 017aaf3578be..f3053ad1f7c9 100644 --- a/content/copilot/how-tos/provide-context/use-mcp/set-up-the-github-mcp-server.md +++ b/content/copilot/how-tos/provide-context/use-mcp/set-up-the-github-mcp-server.md @@ -7,6 +7,14 @@ versions: defaultTool: vscode topics: - Copilot +redirect_from: + - /copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/communicate-with-copilot-platform + - /copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/communicate-with-github + - /copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/configure-app-for-extension + - /copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/host-your-extension + - /copilot/how-tos/use-copilot-extensions/set-up-copilot-extensions + - /copilot/how-tos/provide-context/install-copilot-extensions/install-extensions + - /copilot/how-tos/provide-context/install-copilot-extensions/install-personal-extensions contentType: how-tos category: - Integrate Copilot with your tools diff --git a/content/copilot/how-tos/provide-context/use-mcp/use-the-github-mcp-server.md b/content/copilot/how-tos/provide-context/use-mcp/use-the-github-mcp-server.md index fc102035e2b6..027ea412a151 100644 --- a/content/copilot/how-tos/provide-context/use-mcp/use-the-github-mcp-server.md +++ b/content/copilot/how-tos/provide-context/use-mcp/use-the-github-mcp-server.md @@ -12,6 +12,7 @@ redirect_from: - /copilot/how-tos/context/model-context-protocol/using-the-github-mcp-server - /copilot/how-tos/context/model-context-protocol/use-the-github-mcp-server - /copilot/how-tos/context/use-mcp/use-the-github-mcp-server + - /copilot/how-tos/provide-context/install-copilot-extensions/use-copilot-extensions contentType: how-tos category: - Integrate Copilot with your tools diff --git a/content/copilot/how-tos/set-up/set-up-for-self.md b/content/copilot/how-tos/set-up/set-up-for-self.md index 7a44de3576fa..fce51cdd7700 100644 --- a/content/copilot/how-tos/set-up/set-up-for-self.md +++ b/content/copilot/how-tos/set-up/set-up-for-self.md @@ -55,7 +55,7 @@ All users can configure {% data variables.product.prodname_copilot_short %} sett If you have your own {% data variables.product.prodname_copilot_short %} plan (instead of using your organization or enterprise's plan), you can: -* **Install {% data variables.copilot.copilot_extensions_short %}** to integrate other tools with {% data variables.copilot.copilot_chat_short %}. See [AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/installing-github-copilot-extensions-for-your-personal-account). +* **Install Model Context Protocol (MCP) servers to integrate with {% data variables.copilot.copilot_chat_short %}. See [AUTOTITLE](/copilot/how-tos/context/model-context-protocol/extending-copilot-chat-with-mcp). * **Manage policies**. See [AUTOTITLE](/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/managing-copilot-policies-as-an-individual-subscriber). ## 7. Start using {% data variables.product.prodname_copilot_short %} diff --git a/content/copilot/how-tos/use-ai-models/change-the-chat-model.md b/content/copilot/how-tos/use-ai-models/change-the-chat-model.md index 32e050d1ac0c..39fcc675c6c1 100644 --- a/content/copilot/how-tos/use-ai-models/change-the-chat-model.md +++ b/content/copilot/how-tos/use-ai-models/change-the-chat-model.md @@ -40,8 +40,6 @@ These instructions are for {% data variables.product.prodname_copilot_short %} o {% data reusables.copilot.model-picker-enable-alternative-models %} -> [!NOTE] If you use {% data variables.copilot.copilot_extensions_short %}, they may override the model you select. - 1. In the top right of any page on {% data variables.product.github %}, click the **{% octicon "copilot" aria-hidden="true" aria-label="copilot" %}** icon. ![Screenshot of the 'Copilot' button, highlighted with a dark orange outline.](/assets/images/help/copilot/copilot-icon-top-right.png) diff --git a/content/copilot/how-tos/use-ai-models/configure-access-to-ai-models.md b/content/copilot/how-tos/use-ai-models/configure-access-to-ai-models.md index 3a67b294b10c..9b2033f09c97 100644 --- a/content/copilot/how-tos/use-ai-models/configure-access-to-ai-models.md +++ b/content/copilot/how-tos/use-ai-models/configure-access-to-ai-models.md @@ -10,6 +10,7 @@ redirect_from: - /copilot/using-github-copilot/ai-models/configuring-access-to-ai-models-in-copilot - /copilot/how-tos/ai-models/configuring-access-to-ai-models-in-copilot - /copilot/how-tos/ai-models/configure-access-to-ai-models + - /github-models/use-github-models/integrating-ai-models-into-your-development-workflow contentType: how-tos category: - Configure Copilot diff --git a/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/communicate-with-copilot-platform.md b/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/communicate-with-copilot-platform.md deleted file mode 100644 index 1d6a2fd94996..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/communicate-with-copilot-platform.md +++ /dev/null @@ -1,159 +0,0 @@ ---- -title: Configuring your GitHub Copilot agent to communicate with the GitHub Copilot platform -intro: Learn how to interact with the {% data variables.product.prodname_copilot_short %} platform by sending and receiving server-sent events with your {% data variables.copilot.copilot_agent_short %}. -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Communicate with Copilot platform -layout: inline -redirect_from: - - /copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-the-copilot-platform - - /copilot/how-tos/build-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-the-copilot-platform - - /copilot/how-tos/build-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/communicate-with-copilot-platform - - /copilot/how-tos/build-copilot-extensions/build-a-copilot-agent/communicate-with-copilot-platform -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -{% data variables.copilot.copilot_agents_short %} communicate with the {% data variables.product.prodname_copilot_short %} platform in the form of server-sent events (SSEs). Rather than waiting for the {% data variables.product.prodname_copilot_short %} platform to request an update from your agent, or vice versa, you can use SSEs to send and receive updates to and from the platform in real time. - -To learn more about SSEs, see [Server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) in the mdn documentation. - -## Sending server-sent events - -Your agent should only send one SSE for each interaction with the {% data variables.product.prodname_copilot_short %} platform. There are four predefined SSEs your agent can send: - -* [`copilot_confirmation`](#copilot_confirmation) -* [`copilot_errors`](#copilot_errors) -* [`copilot_references`](#copilot_references) -* [Default SSE](#default-sse) - -### `copilot_confirmation` - -The `copilot_confirmation` SSE sends the user a prompt to confirm an action. This SSE is sent through an event type and data field. See the following code for an example of a `copilot_confirmation` SSE: - -```typescript annotate -// -event: copilot_confirmation -data: { - // Currently, `action` is the only supported value for `type` in `copilot_confirmation`. - "type": "action", - // Title of the confirmation dialog shown to the user. - "title": "Turn off feature flag", - // Confirmation message shown to the user. - "message": "Are you sure you wish to turn off the `copilot` feature flag?", - // Optional field for the agent to include any data needed to uniquely identify this confirmation and take action once the decision is received from the client. - "confirmation": { - "id": "id-123", - "other": "identifier-as-needed", - } -} -``` - -After the user accepts or dismisses the confirmation, the agent receives a message similar to the following example: - -```typescript annotate -// -{ - "copilot_confirmations": [ - { - // A string containing the state of the confirmation. This value is either `accepted` or `dismissed`. - "state": "accepted", - // An array of strings containing data identifying the relevant action. - "confirmation": { - "id": "id-123", - "other": "identifier-as-needed", - } - } - ] -} -``` - -Based on the values in this message, the agent can then complete or cancel the appropriate action. - -### `copilot_errors` - -The `copilot_errors` SSE sends the {% data variables.product.prodname_copilot_short %} platform a list of encountered errors. This SSE is sent through an event type and data field. See the following code for an example of a `copilot_errors` SSE: - -```typescript annotate -// -event: copilot_errors -data: [{ - // A string that specifies the error's type. `type` can have a value of `reference`, `function` or `agent`. - "type": "function", - // A string controlled by the agent describing the nature of an error. - "code": "recentchanges", - // A string that specifies the error message shown to the user. - "message": "The repository does not exist", - // A string that serves as a unique identifier to link the error with other resources such as references or function calls. - "identifier": "github/hello-world" -}] -``` - -### `copilot_references` - -> [!NOTE] Rendering references is currently unsupported for {% data variables.copilot.copilot_mobile_short %}. Extensions that depend on reference memory to generate responses will still work, but the references will not be displayed to the user. - -The `copilot_references` SSE sends the user a list of references used to generate a response. This SSE is sent through an event type and data field. See the following code for an example of a `copilot_references` SSE: - -```typescript annotate -// -event: copilot_references -data: [{ - // A string that specifies the type of the reference. - "type": "blackbeard.story", - // A string that specifies the ID of the reference. - "id": "snippet", - // An optional field where the agent can include any data needed to uniquely identify this reference. - "data": { - "file": "story.go", - "start": "0", - "end": "13", - "content": "func main()...writeStory()..." - }, - // An optional boolean that indicates if the reference was passed implicitly or explicitly. - "is_implicit": false, - // An optional field for the agent to include any metadata to display in the user's environment. If any of the below required fields are missing, then the reference will not be rendered in the UI. - "metadata": { - "display_name": "Lines 1-13 from story.go", - "display_icon": "icon", - "display_url": "http://blackbeard.com/story/1", - - } -}] -``` - -### Default SSE - -The default SSE sends the user a general chat message. This SSE is unnamed and sent solely through a data field. See the following code for an example of a default SSE: - -```text -data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-3.5-turbo-0125", "system_fingerprint": "fp_44709d6fcb", "choices":[{"index":0,"delta":{"role":"assistant","content":""},"logprobs":null,"finish_reason":null}]} -``` - -## Receiving server-sent events - -Just as your agent sends SSEs to the {% data variables.product.prodname_copilot_short %} platform, it also receives the `resp_message` SSE from the platform. This SSE contains a list of messages from the user, as well as optional data related to each of the SSE events the agent can send. See the following code sample for an example curl request to your agent containing a message: - -```bash -curl --request POST \ - --url $AGENT_URL \ - --header 'Accept: application/json' \ - --header 'Content-Type: application/json' \ - --header "X-GitHub-Token: $RUNTIME_GENERATED_TOKEN" \ - --data '{ - "messages": [ - { - "role": "user", - "content": "What is a closure in javascript?", - "copilot_references": [] - } - ] - }' -``` - -## Next steps - -Now that you understand how your {% data variables.copilot.copilot_agent_short %} communicates with the {% data variables.product.prodname_copilot_short %} platform, you can learn how to integrate your agent with the {% data variables.product.github %} API. See [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-github). diff --git a/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/communicate-with-github.md b/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/communicate-with-github.md deleted file mode 100644 index 08fa1e978ff1..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/communicate-with-github.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Configuring your GitHub Copilot agent to communicate with GitHub -intro: Learn how to verify payloads and get resources from {% data variables.product.github %} with your {% data variables.copilot.copilot_agent_short %}. -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Communicate with GitHub -redirect_from: - - /copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-github - - /copilot/how-tos/build-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-github - - /copilot/how-tos/build-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/communicate-with-github - - /copilot/how-tos/build-copilot-extensions/build-a-copilot-agent/communicate-with-github -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -## Prerequisites - -{% data reusables.copilot.copilot-extensions.agents-copilot-platform-prerequisites %} - -## Verifying that payloads are coming from {% data variables.product.github %} - -Before your {% data variables.copilot.copilot_agent_short %} begins processing a request, you should verify that the request came from {% data variables.product.github %}, and that it is intended for your agent. All agent requests contain the `X-GitHub-Public-Key-Identifier` and `X-GitHub-Public-Key-Signature` headers. To verify the signature for a particular request, compare the signature in the `X-GitHub-Public-Key-Signature` header with a signed copy of the request body using the current public key listed at https://api.github.com/meta/public_keys/copilot_api. - -For more details and examples of signature verification in specific languages, see the [`github-technology-partners/signature-verification`](https://github.com/github-technology-partners/signature-verification) repository. - -> ⚠️ **Note:** We currently send duplicate pairs of these headers. One set has the prefix `Github-Public-...`; the other has `X-GitHub-Public...`. The former will be {% data variables.release-phases.closing_down %} **by March 31st**. Please update your relevant checks to the correct prefix (`X-GitHub-Public...`) by then. - -## Fetching resources from the {% data variables.product.github %} API - -Requests to your {% data variables.copilot.copilot_agent_short %} will receive an `X-GitHub-Token` header. This header contains an API token that can be used to fetch resources from the {% data variables.product.github %} API on behalf of the user interacting with your agent. The permissions of this token are the overlap of the user's own permissions and the permissions granted to your {% data variables.product.prodname_github_app %} installation. - -For an example of how you might use `X-GitHub-Token`, see the following code sample: - -```typescript -async function whoami(req) { - const response = await fetch( - // The {% data variables.product.github %} API endpoint for the authenticated user - "https://api.github.com/user", - { - headers: { - "Authorization": `Bearer ${req.headers.get("x-github-token")}` - } - } - ) - - const user = await response.json() - return user -} -``` - -To learn more about working with {% data variables.product.github %}'s API and explore official software development kits (SDKs), see the [`octokit`](https://github.com/octokit) organization. diff --git a/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/index.md b/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/index.md deleted file mode 100644 index 8cd4f31f6aa8..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Building a GitHub Copilot agent for your GitHub Copilot Extension -shortTitle: Build a Copilot agent -intro: Learn how to build a custom {% data variables.copilot.copilot_agent_short %} that determines the functionality of your {% data variables.copilot.copilot_extension_short %}. -versions: - feature: copilot -topics: - - Copilot -children: - - /communicate-with-copilot-platform - - /communicate-with-github - - /use-context-passing - - /use-copilots-llm -redirect_from: - - /copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension - - /copilot/how-tos/build-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension - - /copilot/how-tos/build-copilot-extensions/build-a-copilot-agent -contentType: how-tos ---- - diff --git a/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/use-context-passing.md b/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/use-context-passing.md deleted file mode 100644 index 23f4ca1eeed0..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/use-context-passing.md +++ /dev/null @@ -1,246 +0,0 @@ ---- -title: Context passing for your agent -intro: Learn how to use context passing with your {% data variables.copilot.copilot_agent_short %}. -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Use context passing -redirect_from: - - /copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/context-passing-for-your-agent - - /copilot/how-tos/build-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/context-passing-for-your-agent - - /copilot/how-tos/build-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/use-context-passing - - /copilot/how-tos/build-copilot-extensions/build-a-copilot-agent/use-context-passing -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -## About context passing - -{% data variables.copilot.copilot_extensions %} can access certain contextual information using context passing. -Context passing allows agents to receive relevant details about a user’s current file, selected text, and repository. -It happens automatically when you interact with an extension, but requires your explicit authorization through {% data variables.product.prodname_github_app %} permissions for use in any organization-owned repositories. - -Different clients, such as {% data variables.copilot.copilot_chat %} in {% data variables.product.prodname_vscode %}, {% data variables.product.prodname_vs %}, and {% data variables.product.github %}, provide context through different reference types. -For example, IDEs send information such as file contents and selections, while {% data variables.copilot.copilot_chat_dotcom_short %} includes the current URL for the page being viewed. - -## Prerequisites - -{% data reusables.copilot.copilot-extensions.agents-copilot-platform-prerequisites %} - -## Understanding context passing - -Context passing enables agents to receive information about the user’s active workspace. -Your agent receives server-sent events (SSEs) that contain a list of messages from the user as well as references to the user’s current environment. -Depending on the client, different types of context are provided. - -The following table shows the reference types that are passed to {% data variables.copilot.copilot_extensions %} based on the client or IDE you are using. - -{% rowheaders %} - -| Client or IDE | client.file | client.selection | github.repository | github.current-url | Additional contexts | -| ------------------ | ----------- | ---------------- | ----------------- | ------------------ | ------------------------------------------------- | -| {% data variables.product.prodname_vscode %} | Yes | Yes | Yes | No | Repository owner and branch | -| {% data variables.product.prodname_vs %} | Yes | Yes | Yes | No | Repository owner and branch | -| {% data variables.product.prodname_dotcom_the_website %} | No | No | Yes | Yes | Repository information and other {% data variables.product.github %} resources | -| {% data variables.product.prodname_mobile %} | No | No | No | Yes | Not applicable - -{% endrowheaders %} - -### Reference types for {% data variables.copilot.copilot_chat_short %} in IDEs - -The following reference types can be passed to your agent from an IDE: -* `client.file`: Represents the full content of the currently active file in the IDE. -* `client.selection`: Represents the selected portion of text the user highlighted in the active file. -* `github.repository`: Provides information about the active repository. - -### Reference types for {% data variables.copilot.copilot_chat_dotcom_short %} - -The following reference types can be passed to your agent from {% data variables.product.github %}: -* `github.current-url`: Represents the URL of the current {% data variables.product.github %} page the user is viewing. -* `github.repository`: Provides information about the active repository. - -## Example references - -The following code shows an example object for `client.file`: - -```json -{ - // The reference type. - "type": "client.file", - "data": { - // The full content of the active file. - "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit", - "language": "plaintext" - }, - "id": "relative-path/to/file", - // `is_implicit` indicates whether the reference was automatically provided by the client (true) or manually attached by the user (false). - "is_implicit": true, - "metadata": { - "display_name": "https://github.com/example-user/example-repository", - "display_icon": "", - "display_url": "" - } -} -``` - -The following code shows an example object for `client.selection`: - -```json -{ - // The reference type. - "type": "client.selection", - "data": { - // The currently selected portion of text. - "content": "", - "end": { - "col": 80, - "line": 10 - }, - "start": { - "col": 0, - "line": 0 - } - }, - "id": "relative-path/to/file", - // `is_implicit` indicates whether the reference was automatically provided by the client (true) or manually attached by the user (false). - "is_implicit": true, - "metadata": { - "display_name": "https://github.com/example-user/example-repository", - "display_icon": "", - "display_url": "" - } -} -``` - -The following code shows an example object for `github.repository`: - -```json -{ - // The reference type. - "type": "github.repository", - "data": { - "type": "repository", - "id": "abc-123", - "name": "example-repository", - "ownerLogin": "example-user", - "ownerType": "", - "readmePath": "", - "description": "", - "commitOID": "", - "ref": "", - "refInfo": { - "name": "", - "type": "" - }, - "visibility": "", - "languages": null - }, - "id": "example-user/example-repository", - // `is_implicit` is always false for github.repository. - "is_implicit": false, - "metadata": { - "display_name": "https://github.com/example-user/example-repository", - "display_icon": "", - "display_url": "" - } -} -``` - -The following code shows an example object for `github.current-url`: - -```json -{ - // The reference type. - "type": "github.current-url", - "data": { - // The GitHub URL the user was on while chatting with the agent. - "url": "https://github.com/example-user/example-repository" - }, - "id": "https://github.com/example-user/example-repository", - // `is_implicit` is always true for github.current-url. - "is_implicit": true, - "metadata": { - "display_name": "https://github.com/example-user/example-repository", - "display_icon": "", - "display_url": "" - } -} -``` - -## Setting up context passing - -To enable context passing through an IDE client, the **{% data variables.product.prodname_copilot_short %} Editor Context** permission must be configured for your agent. -This permission only controls access for the `client.file` and `client.selection` reference types. -Users that install and use the agent will be clearly informed that the agent has read access to {% data variables.product.prodname_copilot_short %} Editor Context which includes content such as active file and current selection. - -`github.current-url` and `github.repository` are unaffected by the {% data variables.product.prodname_copilot_short %} Editor Context. These reference types rely on authorization filtering to ensure third party agents only receive references they have access to. For information on managing the privacy of `github.current-url` and `github.repository`, see [Privacy controls](#privacy-controls). - -Follow these steps to set the necessary permissions for context passing from IDEs to your agent: - -{% data reusables.apps.settings-step-personal-orgs %} -{% data reusables.user-settings.developer_settings %} -{% data reusables.user-settings.github_apps %} -1. In the list of {% data variables.product.prodname_github_apps %}, click the {% data variables.product.prodname_github_app %} you want to configure for context passing. -1. In the navigation menu on the left, select **Permissions & events**. -1. Under **Account Permissions**, select **Read-only** access for **{% data variables.product.prodname_copilot_short %} Editor Context**. - -## Privacy controls - -In cases where you don't want to share certain context details with the agent, you can redact and remove reference types in multiple ways. - -### Chat in IDEs - -* If an agent doesn't have the {% data variables.product.prodname_copilot_short %} Editor Context read-access permission, all `client.*` references are removed. -* If an agent doesn't have read access to a repository, all `client.*` references are removed and the `github.repository` reference is redacted. -> [!NOTE] {% data variables.product.prodname_vs %} and {% data variables.product.prodname_vscode %} provides an option to exclude content from the current file. The `client.*` reference types are removed if the user has excluded content from the current file. - -### Chat in {% data variables.product.github %} - -* If an agent doesn't have read access to the repository associated with the current {% data variables.product.github %} URL, the `github.current-url` and `github.repository` references are redacted. -* If repository information cannot be extracted from the current {% data variables.product.github %} URL, `github.current-url` is redacted. - -### Redacted references - -When a reference is redacted due to insufficient permissions, it is replaced with a placeholder indicating the type of information that was excluded. -In the following example, the `type` field indicates that the reference has been redacted and the `data.type` field reveals the original reference type. - -```json -{ - "role": "user", - "content": "Current Date and Time (UTC): 2024-10-22 00:43:14\nCurrent User's Login: monalisa\n", - "name": "_session", - "copilot_references": [ - { - "type": "github.redacted", - "data": { - "type": "github.current-url" - }, - "id": "example-id", - "is_implicit": true, - "metadata": { - "display_name": "", - "display_icon": "", - "display_url": "" - } - } - ], - "copilot_confirmations": null -} -``` - -### Context Exclusions - -To safeguard sensitive information, certain scenarios automatically prevent the passing of context to agents. -If an organization has set content exclusion rules for {% data variables.product.prodname_copilot_short %}, files that fall under these rules will not be included in the context passed to agents. - -For more information on content exclusion rules, see [AUTOTITLE](/copilot/managing-copilot/configuring-and-auditing-content-exclusion/excluding-content-from-github-copilot). - -#### Large Files - -Files exceeding the size limit set by the client will not be sent. The reference will include metadata indicating that the file was too large to process. - -#### Hidden Files - -Files beginning with a dot, such as `.env` and `.config`, are excluded by default to prevent unintentional sharing of sensitive configurations. In {% data variables.product.prodname_vscode_shortname %}, you can specify files or directories in a `.copilotignore` file to prevent them from being sent to {% data variables.product.prodname_copilot_short %} agents. This client-side mechanism offers granular control over which files are excluded. diff --git a/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/use-copilots-llm.md b/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/use-copilots-llm.md deleted file mode 100644 index da39c0aa5c5c..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/use-copilots-llm.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Using GitHub Copilot's LLM for your agent -intro: Learn how to use {% data variables.product.prodname_copilot_short %}'s LLM for your agent. -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Use Copilot's LLM -allowTitleToDifferFromFilename: true -redirect_from: - - /copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-copilots-llm-for-your-agent - - /copilot/how-tos/build-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-copilots-llm-for-your-agent - - /copilot/how-tos/build-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/use-copilots-llm - - /copilot/how-tos/build-copilot-extensions/build-a-copilot-agent/use-copilots-llm -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -## About {% data variables.product.prodname_copilot_short %}'s Large Language Model (LLM) - -{% data variables.product.prodname_copilot_short %}'s Large Language Model (LLM) is a powerful, large-scale language model that is trained on a diverse range of data sources, including code, documentation, and other text. {% data variables.product.prodname_copilot_short %}'s LLM underpins the functionality for {% data variables.product.prodname_copilot %}, and is used to power all of {% data variables.product.prodname_copilot_short %}'s features, including code generation, documentation generation, and code completion. - -You have the option to use {% data variables.product.prodname_copilot_short %}'s LLM to power your agent, which can be useful if you want your agent to be able to generate completions for user messages, but you don't want to manage your own LLM. - -> [!NOTE] Third-party agents have strict rate limits for using {% data variables.product.prodname_copilot_short %}'s LLM. If your third-party agent will need to generate a large number of completions, you should consider using your own LLM or an API like OpenAI. - -## Using {% data variables.product.prodname_copilot_short %}'s LLM for your agent - -You can call {% data variables.product.prodname_copilot_short %}'s LLM deployment at `{% data variables.copilot.chat_completions_api %}` with a POST request. Requests and responses should follow the format as the [OpenAI API](https://platform.openai.com/docs/api-reference/chat/create). - -To authenticate, use the same `X-Github-Token` header sent to your agent. For more information, see [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-github#fetching-resources-from-the-github-api). - -Here is an example of how {% data variables.product.prodname_copilot_short %}'s LLM deployment is used by the Blackbeard extension to generate completions for a user message: - -```javascript - // Use Copilot's LLM to generate a response to the user's - // messages, with our extra system messages attached. - const copilotLLMResponse = await fetch( - "https://api.githubcopilot.com/chat/completions", - { - method: "POST", - headers: { - authorization: `Bearer ${tokenForUser}`, - "content-type": "application/json", - }, - body: JSON.stringify({ - messages, - stream: true, - }), - } - ); -``` - -To see this example in its full context, see the [Blackbeard extension](https://github.com/copilot-extensions/blackbeard-extension). diff --git a/content/copilot/how-tos/use-copilot-extensions/build-copilot-skillsets.md b/content/copilot/how-tos/use-copilot-extensions/build-copilot-skillsets.md deleted file mode 100644 index b9d5c46e16dc..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/build-copilot-skillsets.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Building GitHub Copilot skillsets -intro: Learn the steps to build {% data variables.copilot.copilot_skillsets %} and integrate custom tools and functions into your Copilot environment. -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Build Copilot skillsets -redirect_from: - - /copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension - - /copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/building-copilot-skillsets - - /copilot/how-tos/build-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/building-copilot-skillsets - - /copilot/how-tos/build-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/build-copilot-skillsets - - /copilot/how-tos/build-copilot-extensions/build-a-copilot-skillset/build-copilot-skillsets - - /copilot/how-tos/use-copilot-extensions/build-a-copilot-skillset/build-copilot-skillsets - - /copilot/how-tos/use-copilot-extensions/build-a-copilot-skillset - - /copilot/how-tos/build-copilot-extensions/build-copilot-skillsets -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -## Introduction - -{% data variables.copilot.copilot_skillsets %} are a streamlined way to extend {% data variables.product.prodname_copilot %}'s functionality by defining API endpoints that {% data variables.product.prodname_copilot_short %} can call. When you create a skillset, {% data variables.product.prodname_copilot_short %} handles all the AI interactions while your endpoints provide the data or functionality. This guide walks you through configuring and deploying a skillset within your {% data variables.product.prodname_github_app %}. - -## Prerequisites - -Before you begin, make sure you have the following: - -1. **A configured {% data variables.product.prodname_github_app %}:** You’ll need a {% data variables.product.prodname_github_app %} to act as the container for your skillset. If you haven’t already set one up, refer to [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension) and [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-extension). -1. **API endpoints:** You need one endpoint per skill. Each endpoint must: - * Accept POST requests with the `application/json` MIME type - * Be able to verify the signature of requests from {% data variables.product.github %} to authenticate their origin and prevent unauthorized access - * Be publicly accessible via HTTPS - -For more information about signature verification, see [Verifying that payloads are coming from {% data variables.product.github %}](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-github#verifying-that-payloads-are-coming-from-github). - -## Configuration requirements - -Each skillset is defined within a {% data variables.product.prodname_github_app %}. A single {% data variables.product.prodname_github_app %} can contain up to five skills. Each individual skill needs: -* **Name:** A clear and descriptive name (for example, "Get Issues"). -* **Inference description:** A detailed explanation of what the skill does and when to use it (for example, "Searches for external issues matching specific criteria like status and labels"). -* **API endpoint:** A POST endpoint that accepts JSON requests. -* **JSON schema:** The structure of data your endpoint expects. - -### Example JSON schema - -This example demonstrates a skill that requires two parameters: a status string and a label string. If no parameters are provided, an empty object with the type 'object' must be passed in as the request body. - -```json -{ - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "filter issues by status (open, closed)", - "enum": ["open", "closed"] - }, - "label": { - "type": "string", - "description": "filter issues by label" - } - } -} -``` - -This format lets users make natural-language requests like `find open security issues` and {% data variables.product.prodname_copilot_short %} will structure the appropriate API call. - -## Using your skillset - -To use your skillset: -1. Type `@` followed by your extension's name. -1. Type your prompt in natural language. - - For example: - * `@skillset-example generate a lorem ipsum` - * `@skillset-example give me sample data with 100 words` - -Copilot interprets your request and calls the appropriate skill with the right parameters. There's no need to specify which skill to use—{% data variables.product.prodname_copilot_short %} determines this from your natural-language request and the inference descriptions provided. - -## Setting up a skillset - -{% data reusables.apps.settings-step-personal-orgs %} -{% data reusables.user-settings.developer_settings %} -{% data reusables.user-settings.github_apps %} -1. In the list of {% data variables.product.prodname_github_apps %}, click the {% data variables.product.prodname_github_app %} you want to configure for your skillset. -1. In the navigation menu on the left, select **{% data variables.product.prodname_copilot_short %}**. -1. Under **App Type**, select **Skillset** from the dropdown menu. -1. Optionally, in the **Pre-authorization URL** field, enter the URL where users will be redirected to start the authentication process. This step is necessary if your API requires users to connect their GitHub account to access certain features or data. -{% data reusables.copilot.copilot-extensions.skillsets-configuration-steps %} diff --git a/content/copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/configure-app-for-extension.md b/content/copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/configure-app-for-extension.md deleted file mode 100644 index a1ea96fed17c..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/configure-app-for-extension.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Configuring your GitHub App for your GitHub Copilot extension -intro: Learn how to configure your {% data variables.product.prodname_github_app %} so that it is associated with your {% data variables.copilot.copilot_extension_short %}. -defaultTool: agents -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Configure App for extension -redirect_from: - - /copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent - - /copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-extension - - /copilot/how-tos/build-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-extension - - /copilot/how-tos/build-copilot-extensions/creating-a-copilot-extension/configure-app-for-extension - - /copilot/how-tos/build-copilot-extensions/create-a-copilot-extension/configure-app-for-extension -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -Once you have configured your server and created your {% data variables.product.prodname_github_app %}, you need to configure your {% data variables.product.prodname_github_app %} for use with your {% data variables.product.prodname_copilot_short %} extension. - -## Prerequisites - -* You have configured your server to deploy your {% data variables.copilot.copilot_extension_short %}, and you have your hostname (aka forwarding endpoint). For more information, see [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent). -* You have created a {% data variables.product.prodname_github_app %} for your {% data variables.product.prodname_copilot_short %} extension. For more information, see [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension). - -## Configuring your {% data variables.product.prodname_github_app %} - -{% agents %} - -{% data reusables.apps.settings-step %} -{% data reusables.apps.enterprise-apps-steps %} -1. To the right of the {% data variables.product.prodname_github_app %} you want to configure for your {% data variables.copilot.copilot_extension_short %}, click **Edit**. -1. In the "Identifying and authorizing users" section, under "Callback URL", enter your callback endpoint URL, then click **Save changes**. - - > [!NOTE] Your server's hostname is the forwarding endpoint that you copied from your terminal when you configured your server. See [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent). - > - > If you are using an ephemeral domain in ngrok, you will need to update this URL every time you restart your ngrok server. - -1. In the left sidebar, click **Permissions & events**. -1. To expand the "Account permissions" section, click anywhere in the section. -{% data reusables.copilot.copilot-extensions.account-permissions %} -1. In the left sidebar, click **{% data variables.product.prodname_copilot_short %}**. -1. Read the {% data variables.product.prodname_marketplace %} Developer Agreement and the {% data variables.product.github %} Pre-release License Terms, then accept the terms for creating a {% data variables.copilot.copilot_extension_short %}. - -1. In the "App type" section, select the dropdown menu, then click **Agent**. -1. Under "URL," enter your server's hostname (aka forwarding endpoint) that you copied from your terminal. - - > [!NOTE] If you are using an ephemeral domain in ngrok, you will need to update this URL every time you restart your ngrok server. - -1. Under "Inference description", type a brief description of your agent, then click **Save**. This will be the description users see when they hover over your extension's slug in the chat window. -1. Your pre-authorization URL is a link on your website that starts the authorization process for your extension. Users will be redirected to this URL when they decide to authorize your extension. If you are using a pre-authorization URL, under "Pre-authorization URL," enter the URL, then click **Save**. -1. In your {% data variables.product.prodname_github_app %} settings, in the left sidebar, click **Install App**, then, next to the account you want to install your app on, click **Install**. -{% data reusables.copilot.go-to-copilot-page %} -1. Invoke your extension by typing `@EXTENSION-NAME`, replacing any spaces in the extension name with `-`, then press `Enter`. -1. If this is your first time using the extension, you will be prompted to authenticate. Follow the steps on screen to authenticate your extension. -1. Ask your extension a question in the chat window. For example, `What is the software development lifecycle?`. - -{% endagents %} - -{% skillsets %} - -{% data reusables.apps.settings-step %} -{% data reusables.apps.enterprise-apps-steps %} -1. To the right of the {% data variables.product.prodname_github_app %} you want to configure for your {% data variables.copilot.copilot_extension_short %}, click **Edit**. -1. In the "Identifying and authorizing users" section, under "Callback URL", enter your callback endpoint URL, then click **Save changes**. - - > [!NOTE] Your server's hostname is the forwarding endpoint that you copied from your terminal when you configured your server. See [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent). - > - > If you are using an ephemeral domain in ngrok, you will need to update this URL every time you restart your ngrok server. - -1. In the left sidebar, click **Permissions & events**. -1. To expand the "Account permissions" section, click anywhere in the section. -{% data reusables.copilot.copilot-extensions.account-permissions %} -1. In the left sidebar, click **{% data variables.product.prodname_copilot_short %}**. -1. Read the {% data variables.product.prodname_marketplace %} Developer Agreement and the {% data variables.product.github %} Pre-release License Terms, then accept the terms for creating a {% data variables.copilot.copilot_extension_short %}. - -1. In the "App type" section, select the dropdown menu, then click **Skillset**. -1. Your pre-authorization URL is a link on your website that starts the authorization process for your extension. Users will be redirected to this URL when they decide to authorize your extension. If you are using a pre-authorization URL, under "Pre-authorization URL," enter the URL, then click **Save**. -{% data reusables.copilot.copilot-extensions.skillsets-configuration-steps %} -1. In your {% data variables.product.prodname_github_app %} settings, in the left sidebar, click **Install App**, then, next to the account you want to install your app on, click **Install**. -{% data reusables.copilot.go-to-copilot-page %} -1. Invoke your extension by typing `@EXTENSION-NAME`, replacing any spaces in the extension name with `-`, then press `Enter`. -1. If this is your first time using the extension, you will be prompted to authenticate. Follow the steps on screen to authenticate your extension. -1. Ask your extension a question in the chat window. For example, `What is the software development lifecycle?`. - -{% endskillsets %} diff --git a/content/copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/create-github-app.md b/content/copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/create-github-app.md deleted file mode 100644 index 11a4dda970b0..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/create-github-app.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Creating a GitHub App for your GitHub Copilot Extension -intro: Learn how to create a {% data variables.product.prodname_github_app %} for your {% data variables.copilot.copilot_extension_short %}. -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Create GitHub App -redirect_from: - - /copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension - - /copilot/how-tos/build-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension - - /copilot/how-tos/build-copilot-extensions/creating-a-copilot-extension/create-github-app - - /copilot/how-tos/build-copilot-extensions/create-a-copilot-extension/create-github-app -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -A {% data variables.copilot.copilot_extension_short %} is a {% data variables.product.prodname_github_app %} that is associated with a {% data variables.copilot.copilot_agent_short %}. The {% data variables.product.prodname_github_app %} you associate your {% data variables.copilot.copilot_agent_short %} with is used to authenticate the {% data variables.copilot.copilot_agent_short %} with {% data variables.product.prodname_dotcom %} and to authorize the {% data variables.copilot.copilot_agent_short %} to access the {% data variables.copilot.copilot_chat_short %} API. Each {% data variables.copilot.copilot_agent_short %} must be associated with a unique {% data variables.product.prodname_github_app %}. - -## Prerequisites - -* You have created a {% data variables.copilot.copilot_agent_short %}. For more information, see [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension). -* You have configured your server to deploy your {% data variables.copilot.copilot_agent_short %}, and you have your hostname (aka forwarding endpoint). For more information, see [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent). - -## Creating a {% data variables.product.prodname_github_app %} - -{% data reusables.apps.settings-step %} -{% data reusables.apps.enterprise-apps-steps %} -1. Click **New {% data variables.product.prodname_github_app %}**. -1. Under "{% data variables.product.prodname_github_app %} name," enter a name for your app. - - > [!NOTE] The name cannot be longer than 34 characters. - > - >Your app's name will be shown in the user interface when your app takes an action. Uppercase letters will be converted to lowercase, with spaces replaced by `-`, and accents ignored. For example, `My APp Näme` would display as `my-app-name`. - > - > The name must be unique across {% data variables.product.company_short %}. You cannot use the same name as an existing {% data variables.product.company_short %} account, unless it is your own user or organization name. - -1. Optionally, under "Description," type a description of your app. Users and organizations will see this description when they install your app. -1. Under "Homepage URL," enter a URL for your app. You can use: - * Your app's website URL. - * The URL of the organization or user that owns the app. - * The URL of the repository where your app's code is stored, if it is a public repository. -1. Under "Webhook," deselect **Active**. -1. Click **Create {% data variables.product.prodname_github_app %}**. - -## Next steps - -* [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent) diff --git a/content/copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/host-your-extension.md b/content/copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/host-your-extension.md deleted file mode 100644 index 6d58309f4b88..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/host-your-extension.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Configuring your server to host your GitHub Copilot extension -intro: Learn how to make your {% data variables.product.prodname_copilot_short %} extension accessible to the internet. -versions: - feature: copilot-extensions -redirect_from: - - /copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent - - /copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-host-your-copilot-agent - - /copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-host-your-copilot-extension - - /copilot/how-tos/build-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-host-your-copilot-extension - - /copilot/how-tos/build-copilot-extensions/creating-a-copilot-extension/host-your-extension - - /copilot/how-tos/build-copilot-extensions/create-a-copilot-extension/host-your-extension -topics: - - Copilot -shortTitle: Host your extension -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -Your {% data variables.copilot.copilot_extension_short %} must be hosted on a server that is accessible to the internet. In this guide, we will use [ngrok](https://ngrok.com/) to create a tunnel to your local server, but you could also use a service like [localtunnel](https://localtunnel.github.io/www/). - -Alternatively, if you are a {% data variables.product.prodname_codespaces %} user, you can use the built-in {% data variables.product.prodname_codespaces %} port forwarding. For more information, see [AUTOTITLE](/codespaces/developing-in-a-codespace/forwarding-ports-in-your-codespace). - -## Prerequisites - -* You have created a {% data variables.copilot.copilot_extension_short %}. For more information, see [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension) or [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension). - -## Configuring your server - -1. Visit the [ngrok setup & installation page](https://dashboard.ngrok.com/get-started/setup/). -1. If you do not yet have an account, follow the instructions on screen to sign up. -1. Under "Agents," ensure the correct operating system is selected. -1. Under "Installation," follow the instructions for your operating system to download and install ngrok. -1. Under "Deploy your app online," select **Ephemeral domain** or **Static domain**. -1. Run the command provided in your terminal, replacing the port number with the port your extension is configured to run on. For example: - - * For an ephemeral domain: - - ```shell copy - ngrok http http://localhost:EXTENSION-PORT-NUMBER - ``` - - * For a static domain: - - ```shell copy - ngrok http --domain=YOUR-STATIC-DOMAIN.ngrok-free.app EXTENSION-PORT-NUMBER - ``` - -1. In your terminal, next to "Forwarding," copy the URL that ngrok has assigned to your server. You will need this forwarding endpoint when you are configuring your {% data variables.product.prodname_github_app %}. - - > [!NOTE] Do not copy the `-> http://localhost:XXXX` part of the URL. - > - > Keep the terminal window open while you are using your extension. - -## Next steps - -* [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension) diff --git a/content/copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/index.md b/content/copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/index.md deleted file mode 100644 index 88461708db8c..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/create-a-copilot-extension/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Creating a GitHub Copilot Extension -shortTitle: Create a Copilot Extension -intro: Learn how to integrate your {% data variables.copilot.copilot_agent_short %} with a {% data variables.product.prodname_github_app %} to create your {% data variables.copilot.copilot_extension_short %}. -versions: - feature: copilot -topics: - - Copilot -children: - - /host-your-extension - - /create-github-app - - /configure-app-for-extension -redirect_from: - - /copilot/building-copilot-extensions/creating-a-copilot-extension - - /copilot/how-tos/build-copilot-extensions/creating-a-copilot-extension - - /copilot/how-tos/build-copilot-extensions/create-a-copilot-extension -contentType: how-tos ---- - diff --git a/content/copilot/how-tos/use-copilot-extensions/debug-copilot-extension.md b/content/copilot/how-tos/use-copilot-extensions/debug-copilot-extension.md deleted file mode 100644 index 2dbbb0fa0426..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/debug-copilot-extension.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Debugging your GitHub Copilot Extension -intro: Learn how to debug your {% data variables.copilot.copilot_extension %} from the command line before you publish it. -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Debug Copilot Extension -redirect_from: - - /copilot/building-copilot-extensions/debugging-your-github-copilot-extension - - /copilot/how-tos/build-copilot-extensions/debugging-your-github-copilot-extension - - /copilot/how-tos/build-copilot-extensions/debug-copilot-extension -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -With the debug tool for {% data variables.copilot.copilot_extensions_short %}, you can chat with your {% data variables.copilot.copilot_agent_short %} from the command line, then view detailed logs as your agent generates a response. You can pass several flags to the tool, with the most important flags being: -* The `url` flag, which contains the URL to access your {% data variables.copilot.copilot_agent_short %}. This is the only required flag to start the tool. -* The `log-level` flag, which determines the level of visibility you have into your {% data variables.copilot.copilot_agent_short %}'s process for generating a response. The available log levels are `DEBUG`, `NONE`, and `TRACE`, and the tool uses `DEBUG` by default. -* The `token` flag, which must contain a {% data variables.product.pat_v2 %} with read access to {% data variables.copilot.copilot_chat_short %} if your {% data variables.copilot.copilot_agent_short %} calls the {% data variables.product.prodname_copilot_short %} LLM. If your agent calls a different LLM, you don't need to use this flag. - -## Prerequisites - -To use the debug tool, you need to have the {% data variables.product.prodname_cli %} installed on your machine. You can install the {% data variables.product.prodname_cli %} in one of two ways: -* From the command line using a package manager. For example, to install the {% data variables.product.prodname_cli %} with Homebrew, paste the following command to the command line, then follow the prompts: - - ```bash copy - brew install gh - ``` - -* From the [{% data variables.product.prodname_cli %} releases page](https://github.com/cli/cli/releases/tag/v2.56.0) - -## Debugging your {% data variables.copilot.copilot_extension_short %} with the CLI - -1. Optionally, to prepare to debug a specific server-sent event (SSE), add some code to your {% data variables.copilot.copilot_agent_short %} that sends an SSE when a prompt contains a certain keyword. - - > [!NOTE] The debug tool does not handle the payload verification process. To validate your SSEs, you need to temporarily disable payload verification for local testing, then re-enable it after you have successfully tested your extension. - -1. On the command line, start your {% data variables.copilot.copilot_agent_short %}. -1. To authenticate with the {% data variables.product.prodname_cli %} {% data variables.product.prodname_oauth_app %}, in a new window of your command line application, paste the following command and follow the prompts: - - ```bash copy - gh auth login --web -h github.com - ``` - -1. In the same window, to install the debug tool, paste the following command: - - ```bash copy - gh extension install github.com/copilot-extensions/gh-debug-cli - ``` - -1. Optionally, for a list of available flags and their descriptions, paste the following command to the command line: - - ```bash copy - gh debug-cli -h - ``` - -1. Optionally, set environment variables for each flag you want to use. Environment variables allow you to set a constant value for a flag rather than passing a value in each time you run the debug tool. For example, if you are using the Blackbeard extension to test the debug tool, you can create an environment variable for the agent URL as follows: - - ```bash copy - export URL="http://localhost:3000" - ``` - - > [!NOTE] To set an environment variable for a flag, you must use the name of the flag in all caps. - -1. To start the debug tool, paste the following command to the command line, adding any flags you want to use: - - ```bash copy - gh debug-cli - ``` - - The only required flag is the `url` flag, but you will likely want to use additional flags like `log-level` and `token`. - - Once the debug tool is running, you should see a message that reads "Start typing to chat with your assistant...". - -1. To interact with your agent, enter a prompt on the command line. The output will vary based on the log level you chose in the previous step, with the `DEBUG` and `TRACE` log levels providing more detailed information. - - > [!TIP] If you are debugging an SSE, send a prompt containing the keyword you specified in your {% data variables.copilot.copilot_agent_short %} to trigger the SSE, then analyze the output in your command line application. diff --git a/content/copilot/how-tos/use-copilot-extensions/index.md b/content/copilot/how-tos/use-copilot-extensions/index.md deleted file mode 100644 index d621d34f1538..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: GitHub Copilot Extensions -shortTitle: Build Copilot Extensions -intro: Learn how to integrate external tools with {% data variables.product.prodname_copilot_short %}. -versions: - feature: copilot -topics: - - Copilot -children: - - /set-up-copilot-extensions - - /create-a-copilot-extension - - /build-a-copilot-agent - - /build-copilot-skillsets - - /set-up-oidc - - /debug-copilot-extension - - /manage-extension-availability -redirect_from: - - /copilot/building-copilot-extensions - - /copilot/how-tos/build-copilot-extensions -contentType: how-tos ---- - diff --git a/content/copilot/how-tos/use-copilot-extensions/manage-extension-availability.md b/content/copilot/how-tos/use-copilot-extensions/manage-extension-availability.md deleted file mode 100644 index 7c3a5c2f891a..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/manage-extension-availability.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Managing the availability of your GitHub Copilot Extension -intro: After you build your {% data variables.copilot.copilot_extension_short %}, you can change it's visibility or publish it on the {% data variables.product.prodname_marketplace %}. -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Manage Extension availability -redirect_from: - - /copilot/building-copilot-extensions/managing-the-availability-of-your-copilot-extension - - /copilot/how-tos/build-copilot-extensions/managing-the-availability-of-your-copilot-extension - - /copilot/how-tos/build-copilot-extensions/manage-extension-availability -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -When you build a {% data variables.copilot.copilot_extension_short %}, you have two options for the visibility of your {% data variables.product.prodname_github_app %}: - -* **Public:** Any user or organization account with the link to your app's installation page can install it. Making your app public automatically creates a public installation page, but does not list the app on the {% data variables.product.prodname_marketplace %}. -* **Private:** Any user, organization, or enterprise can create an extension. Any user or organization, and any organization in an enterprise can install an enterprise-created extension. Private extensions are not available to all users outside your organization or enterprise based on the level at which it was created. - -If you make your app public, you can choose to publish it on the {% data variables.product.prodname_marketplace %}. - -## Changing the visibility of your {% data variables.copilot.copilot_extension_short %} - -{% data reusables.profile.access_org %} -{% data reusables.organizations.org-list %} -1. At the bottom of the sidebar, select **{% octicon "code" aria-hidden="true" aria-label="code" %} Developer settings**, then click **{% data variables.product.prodname_github_apps %}**. -1. In the "{% data variables.product.prodname_github_apps %}" section, next to the name of your {% data variables.copilot.copilot_extension_short %}, click **Edit**. -1. In the sidebar, click **Advanced**. At the bottom of the "Danger Zone" section, you will see one of two options: - * **Make public:** If you see the **Make public** option, your {% data variables.product.prodname_github_app %} is currently private, and can only be installed by the organization or user that created the app. You can click **Make public** to allow any other account with the link to your app's installation page to install your {% data variables.product.prodname_copilot_short %} extension. Leave the settings unchanged to keep your app private. - * **Make private:** If you see the **Make private** option, your {% data variables.product.prodname_github_app %} is currently public, and can be installed by any account with the link to your app's installation page. You can click **Make private** to only allow installations by the organization or user that created the app, or organizations that are part of the enterprise that created the extension. Leave the settings unchanged to keep your app public. -1. Optionally, if your {% data variables.product.prodname_github_app %} is public, you can share the link to the installation page for your {% data variables.copilot.copilot_extension_short %}. In the sidebar, click **Public page** in the sidebar, then copy the link for your listing. - -> [!NOTE] You can set a published marketplace extension to private, and it will remain accessible on the {% data variables.product.prodname_marketplace %}. However, it won't be accessible from the direct installation page. - -## Listing your {% data variables.copilot.copilot_extension_short %} on the {% data variables.product.prodname_marketplace %} - - To list your {% data variables.copilot.copilot_extension_short %} on the {% data variables.product.prodname_marketplace %}, you must meet the following requirements: - -* You must publish your app from an organization that is a verified publisher on the {% data variables.product.prodname_marketplace %}. - * If your organization is not yet verified, see [AUTOTITLE](/apps/github-marketplace/github-marketplace-overview/applying-for-publisher-verification-for-your-organization). - * If you need to transfer ownership of your app from your personal account to your organization account, see [AUTOTITLE](/apps/maintaining-github-apps/transferring-ownership-of-a-github-app). -* Your app must meet the requirements for all {% data variables.copilot.copilot_extension_short %} listings on the {% data variables.product.prodname_marketplace %}. See [AUTOTITLE](/apps/github-marketplace/creating-apps-for-github-marketplace/requirements-for-listing-an-app#requirements-for-github-copilot-extensions). - -App managers cannot create, edit, or publish extensions on the {% data variables.product.prodname_marketplace %}. To manage a listing, you should be an organization owner for the publishing organization. - -> [!NOTE] Paid plans are not supported for {% data variables.copilot.copilot_extensions_short %} during {% data variables.release-phases.public_preview %}. Any requests to publish with a paid plan attached will not be approved. - -{% data reusables.profile.access_org %} -{% data reusables.organizations.org-list %} -1. At the bottom of the sidebar, select **{% octicon "code" aria-hidden="true" aria-label="code" %} Developer settings**, then click **{% data variables.product.prodname_github_apps %}**. -1. Select the app you'd like to publish to the {% data variables.product.prodname_marketplace %}. -1. On the app settings landing page, scroll down to the Marketplace section, then click **List in Marketplace**. The Marketplace section is only visible if your app is public. -1. In the "Listing name" text box, type a name for your listing. This name is displayed on the {% data variables.product.prodname_marketplace %} page and in search results, and can be changed later. {% data variables.product.github %} recommends using any of the following naming conventions: - * `YOUR-PRODUCT-NAME` (example: "{% data variables.product.prodname_copilot_short %}"): We recommend this convention if your extension stays within the scope of a single product and there are no other well-known products with the same name. - * `YOUR-COMPANY-NAME` (example "{% data variables.product.github %}"): We recommend this convention if your extension spans multiple products. - * `YOUR-COMPANY-PRODUCT-NAME` (example: "{% data variables.product.prodname_copilot %}"): We recommend this convention if your extension stays within the scope of one product, but there are other well-known products with the same name. - - > [!NOTE] The listing name is not the same as your {% data variables.product.prodname_github_app %}'s name or your {% data variables.copilot.copilot_extension_short %}'s slug. Changing the listing name will not affect the app name or slug. - -1. In the "Primary category" section, select the dropdown menu, then click a category. You can change your selection or add a secondary category later. -1. To create a draft listing for your {% data variables.copilot.copilot_extension_short %}, click **Save and add more details**. -1. After you create a new draft listing, you'll see a view where you can manage your listing. Before you can submit your listing for review, you need to: - * Fill out each of the required sections - * Verify the organization account that owns the {% data variables.product.prodname_github_app %} - * Accept the {% data variables.product.prodname_marketplace %} Developer Agreement -1. To submit your listing, click **Submit for review**. After your listing is reviewed, an onboarding expert will let you know if your submission was approved or denied. - -> [!NOTE] {% data variables.product.github %} reviews all submissions to ensure they meet our standards for quality, performance, reliability, and security. {% data variables.product.github %} may deny submissions at its own discretion, and will provide reasons for denials. You are welcome to address any issues and resubmit your extension for review. You may also go through the [GitHub Appeal and Reinstatement Process](/free-pro-team@latest/site-policy/acceptable-use-policies/github-appeal-and-reinstatement). diff --git a/content/copilot/how-tos/use-copilot-extensions/set-up-copilot-extensions.md b/content/copilot/how-tos/use-copilot-extensions/set-up-copilot-extensions.md deleted file mode 100644 index 354e59726f7d..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/set-up-copilot-extensions.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Setting up GitHub Copilot Extensions -intro: Follow these steps to start building {% data variables.copilot.copilot_extensions_short %}. -defaultTool: agents -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Set up Copilot Extensions -redirect_from: - - /copilot/building-copilot-extensions/setting-up-copilot-extensions - - /copilot/how-tos/build-copilot-extensions/setting-up-copilot-extensions - - /copilot/how-tos/build-copilot-extensions/set-up-copilot-extensions -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - - - - - -{% data reusables.copilot.copilot-extensions.extensions-retirement %} - - - -This article is designed to help you build an entirely new {% data variables.copilot.copilot_extension %}. To instead learn how to quickly build and test a demo {% data variables.copilot.copilot_extension_short %} created by {% data variables.product.github %}, see [AUTOTITLE](/copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions). - -{% data reusables.copilot.copilot-extensions.differences-between-agents-and-skillsets-1 %} -For more information about skillsets, see [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/about-copilot-skillsets). -{% data reusables.copilot.copilot-extensions.differences-between-agents-and-skillsets-2 %} - -{% agents %} - -## 1. Learn about {% data variables.copilot.copilot_agents_short %} - -{% data variables.copilot.copilot_agents_short %} contain the custom code for your {% data variables.copilot.copilot_extension_short %}, and integrate with a {% data variables.product.prodname_github_app %} to form the {% data variables.copilot.copilot_extension_short %} itself. For more information, see [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/about-copilot-agents). - -To successfully build a {% data variables.copilot.copilot_agent_short %}, you need to understand how the agent communicates with: - -* The {% data variables.product.prodname_copilot_short %} platform using server-sent events. See [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-the-copilot-platform). -* The {% data variables.product.github %} API. See [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-github). - -## 2. Review example {% data variables.copilot.copilot_agents_short %} and the {% data variables.copilot.copilot_extensions_short %} SDK - -To see the previous concepts in practice and learn about agent implementations, review the following example agents and software development kit (SDK), all of which are available in the [`copilot-extensions`](https://github.com/copilot-extensions) organization: - -* [Blackbeard](https://github.com/copilot-extensions/blackbeard-extension) (best starting point): A simple agent that responds to requests like a pirate using {% data variables.product.prodname_copilot_short %}'s large language model (LLM) API and special system prompts. -* [{% data variables.product.prodname_github_models %}](https://github.com/copilot-extensions/github-models-extension): A more complex agent that lets you ask about and interact with various LLMs listed on the {% data variables.product.prodname_marketplace %} through {% data variables.copilot.copilot_chat_short %}. The {% data variables.product.prodname_github_models %} agent makes use of function calling. -* [Function Calling](https://github.com/copilot-extensions/function-calling-extension): An example agent written in Go that demonstrates function calling and confirmation dialogs. -* [RAG Extension](https://github.com/copilot-extensions/rag-extension): An example agent written in Go that demonstrates a simple implementation of retrieval augmented generation. -* [Preview SDK](https://github.com/copilot-extensions/preview-sdk.js/tree/main): An SDK that streamlines the development of {% data variables.copilot.copilot_extensions_short %} by handling request verification, payload parsing, and response formatting automatically. This SDK allows extension builders to focus more on creating core functionality and less on boilerplate code. - -## 3. Build a {% data variables.copilot.copilot_agent_short %} - -Using the reference material from the previous steps, plan and build your {% data variables.copilot.copilot_agent_short %}. You can choose to implement any of the following options: - -* To avoid building and managing your own LLM deployment, your agent can call the Copilot LLM deployment. See [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-copilots-llm-for-your-agent). -* To quickly interpret user input and choose from a variety of predefined functions to execute, you can implement function calling in your agent. To learn more, see [How to use function calling with Azure OpenAI Service](https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/function-calling) in the Azure OpenAI documentation and [Function calling](https://platform.openai.com/docs/guides/function-calling) in the OpenAI documentation. - -## 4. Deploy your {% data variables.copilot.copilot_agent_short %} - -To make your {% data variables.copilot.copilot_agent_short %} accessible to the {% data variables.product.prodname_copilot_short %} platform and {% data variables.product.github %}, you need to deploy it to a server that is reachable by HTTP request. See [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent). - -## 5. Create a {% data variables.product.prodname_github_app %} and integrate it with your {% data variables.copilot.copilot_agent_short %} - -To create a {% data variables.copilot.copilot_extension_short %}, you need to create and configure a {% data variables.product.prodname_github_app %}, then integrate it with your {% data variables.copilot.copilot_agent_short %}. See [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension) and [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent). - -## 6. Choose the availability of your {% data variables.copilot.copilot_extension_short %} - -Choose one of two visibility levels for your {% data variables.copilot.copilot_extension_short %}: -* **Public:** Any user or organization account with the installation page link for the extension can install it. -* **Private:** Only the user or organization account that created the extension can install it. - -If you make your {% data variables.copilot.copilot_extension_short %} public, you can then choose to list it on the {% data variables.product.prodname_marketplace %}. - -To learn how to change the visibility of your {% data variables.copilot.copilot_extension_short %} and list it on the {% data variables.product.prodname_marketplace %}, see [AUTOTITLE](/copilot/building-copilot-extensions/managing-the-availability-of-your-copilot-extension). - -## Next steps - -To learn how to use your {% data variables.copilot.copilot_extension_short %}, see [AUTOTITLE](/copilot/using-github-copilot/using-extensions-to-integrate-external-tools-with-copilot-chat). - -{% endagents %} - -{% skillsets %} - -## 1. Learn about {% data variables.copilot.copilot_skillsets %} - -{% data variables.copilot.copilot_skillsets %} contain the custom code for your {% data variables.copilot.copilot_extension_short %}, and integrate with a {% data variables.product.prodname_github_app %} to form the {% data variables.copilot.copilot_extension_short %} itself. - -Unlike {% data variables.copilot.copilot_agents_short %}, {% data variables.copilot.copilot_skillsets_short %} handle the logic behind prompt crafting, function evaluation, and response generation, making them an ideal choice for developers seeking quick and effective integrations with minimal effort. For more information, see [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/about-copilot-skillsets). - -## 2. Build a {% data variables.copilot.copilot_skillset_short %} - -To explore an example of a skillset implementation, see the [skillset-example](https://github.com/copilot-extensions/skillset-example) repository in the [`copilot-extensions`](https://github.com/copilot-extensions) organization. - -To build a skillset, see [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/building-copilot-skillsets). - -## 3. Deploy your {% data variables.copilot.copilot_skillset_short %} - -To make your {% data variables.copilot.copilot_skillset_short %} accessible to the {% data variables.product.prodname_copilot_short %} platform and {% data variables.product.github %}, you need to deploy it to a server that is reachable by HTTP request. See [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent). - -## 4. Create a {% data variables.product.prodname_github_app %} and integrate it with your {% data variables.copilot.copilot_skillset_short %} - -To create a {% data variables.copilot.copilot_extension_short %}, you need to create and configure a {% data variables.product.prodname_github_app %}, then integrate it with your {% data variables.copilot.copilot_skillset_short %}. See [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension) and [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent). - -## 5. Choose the availability of your {% data variables.copilot.copilot_skillset_short %} - -Choose one of two visibility levels for your {% data variables.copilot.copilot_extension_short %}: -* **Public:** Any user or organization account with the installation page link for the extension can install it. -* **Private:** Only the user or organization account that created the extension can install it. - -If you make your {% data variables.copilot.copilot_extension_short %} public, you can then choose to list it on the {% data variables.product.prodname_marketplace %}. - -To learn how to change the visibility of your {% data variables.copilot.copilot_extension_short %} and list it on the {% data variables.product.prodname_marketplace %}, see [AUTOTITLE](/copilot/building-copilot-extensions/managing-the-availability-of-your-copilot-extension). - -## Next steps - -To learn how to use your {% data variables.copilot.copilot_extension_short %}, see [AUTOTITLE](/copilot/using-github-copilot/using-extensions-to-integrate-external-tools-with-copilot-chat). - -{% endskillsets %} diff --git a/content/copilot/how-tos/use-copilot-extensions/set-up-oidc.md b/content/copilot/how-tos/use-copilot-extensions/set-up-oidc.md deleted file mode 100644 index c08982036d2c..000000000000 --- a/content/copilot/how-tos/use-copilot-extensions/set-up-oidc.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Setting up OIDC for your GitHub Copilot extension -intro: Learn how to set up OpenID Connect (OIDC) with your {% data variables.copilot.copilot_extension_short %} to enhance security. -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Set up OIDC -allowTitleToDifferFromFilename: true -redirect_from: - - /copilot/building-copilot-extensions/using-oidc-with-copilot-extensions - - /copilot/building-copilot-extensions/using-oidc-with-github-copilot-extensions - - /copilot/how-tos/build-copilot-extensions/using-oidc-with-github-copilot-extensions - - /copilot/how-tos/build-copilot-extensions/set-up-oidc -contentType: how-tos -category: - - Integrate Copilot with your tools ---- - -## Introduction - -You can set up OIDC so that {% data variables.product.prodname_copilot_short %} agents and skillsets can more securely authenticate users and access cloud resources. For more information on OIDC, see [AUTOTITLE](/copilot/concepts/copilot-extensions/openid-connect). - -There are three steps to setting up OIDC for your extension. -* [Configure your token exchange endpoint](#configure-your-token-exchange-endpoint). -* [Enable OIDC in your Copilot extensions settings](#enable-oidc-in-your-copilot-extensions-settings). -* [Validate OIDC tokens](#validate-oidc-tokens). - -## Configure your token exchange endpoint - -Create an endpoint in your service that conforms to the [RFC 8693 OAuth 2.0 Token Exchange](https://www.rfc-editor.org/rfc/rfc8693.html). -This endpoint should: -* Accept `POST` requests with the following form-encoded parameters: - - ```http request - grant_type=urn:ietf:params:oauth:grant-type:token-exchange - &resource= - &subject_token= - &subject_token_type=urn:ietf:params:oauth:token-type:id_token - ``` - -* Return a JSON response with your service's access token: - - ```json - { - "access_token": <"your-service-token">, - "issued_token_type":"urn:ietf:params:oauth:token-type:access_token", - "token_type": "Bearer", - "expires_in": 3600 - } - ``` - -* Return an error response when validation fails: - - ```json - { - "error": "invalid_request" - } - ``` - -## Enable OIDC in your {% data variables.copilot.copilot_extension_short %}'s settings - -In your {% data variables.copilot.copilot_extension_short %}'s configuration, enable OIDC: - -{% data reusables.apps.settings-step %} -{% data reusables.apps.enterprise-apps-steps %} -1. To the right of the {% data variables.product.prodname_github_app %} you want to configure for your {% data variables.copilot.copilot_extension_short %}, click **Edit**. -1. In the left sidebar, click **{% data variables.product.prodname_copilot_short %}**. -1. Under **OpenID Connect Token Exchange**, check **Enabled**. -1. In the **Token exchange endpoint** field, input your token exchange URL. -1. In the **Request header key** field, input the header key for your service's token. The default is `Authorization`. -1. In the **Request header value** field, input the header value format. The default is `Bearer ${token}`. - -## Validate OIDC tokens - -Your token exchange endpoint should validate the {% data variables.product.github %} OIDC token by following the steps below: -1. Fetch the JSON Web Key Set (JWKS) from https://github.com/login/oauth/.well-known/openid-configuration. -1. Verify the token signature. -1. Validate required claims. - * `aud`: Audience. Your {% data variables.copilot.copilot_extension_short %}'s client ID. - * `sub`: Subject. The {% data variables.product.github %} user ID making the request. The response is limited to data that the user has permissions to access. If the user has no permissions `400 Bad Request` is shown. - * `iat`: Issued At. The timestamp when the token was issued. It is typically a timestamp in the past but represents the exact moment the token was created. - * `nbf`: Not Before. The timestamp before which the token is not valid. This should be a timestamp in the past. - * `exp`: Expiration Time. The timestamp when the token expires. This should be a timestamp in the future. - * `act`: Actor. The acting entity in delegated access. This should be a constant string. - -## Troubleshooting - -The following sections outline common problems and best practices for implementing OIDC for your {% data variables.copilot.copilot_extension_short %}. - -### Token validation errors - -* Ensure you're using the correct JWKS endpoint. -* Verify that all the required claims are present and valid. -* Check that timestamps (`iat`, `nbf`, and `exp`) are within valid ranges. - -### Token exchange failures - -* Return `HTTP 400` for invalid tokens. -* Return `HTTP 403` if the user lacks the necessary permissions. -* If {% data variables.product.github %} receives a 403 response, it will retry the request with a new token. - -### Performance issues - -* Implement efficient token validation to minimize latency. -* Use appropriate token expiration times (recommended: 10 minutes or less). -* Consider caching implications for high-traffic extensions. - -## Further reading - -* [AUTOTITLE](/copilot/concepts/copilot-extensions/openid-connect) diff --git a/content/copilot/reference/extensions-glossary.md b/content/copilot/reference/extensions-glossary.md deleted file mode 100644 index d80ad1567f21..000000000000 --- a/content/copilot/reference/extensions-glossary.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: GitHub Copilot Extensions glossary -shortTitle: Extensions glossary -allowTitleToDifferFromFilename: true -intro: 'Understand the terminology used in {% data variables.copilot.copilot_extensions_short %}.' -versions: - feature: copilot-extensions -topics: - - Copilot -category: - - Learn about Copilot -redirect_from: - - /copilot/building-copilot-extensions/copilot-extensions-glossary - - /copilot/reference/copilot-extensions/copilot-extensions-glossary - - /copilot/reference/copilot-extensions-glossary -contentType: reference ---- - -The following terms are used in the context of {% data variables.copilot.copilot_extensions_short %}, and are defined here for clarity. - -#### Agent - -A type of {% data variables.copilot.copilot_extension_short %} implementation that gives developers full control over handling user queries and response generation. This approach is ideal for builders who want complete customization and management of AI interactions. - -#### Context passing - -A capability in {% data variables.copilot.copilot_extensions_short %} that enables user context from editors to be sent to agents, allowing for more tailored responses. - -#### {% data variables.copilot.copilot_chat_short %} - -The conversational interface within {% data variables.product.prodname_copilot %} where users can interact with the AI assistant and extensions. - -#### {% data variables.copilot.copilot_extension_short %} - -A {% data variables.product.prodname_github_app %} with additional access to the {% data variables.copilot.copilot_chat_short %} window and Copilot API, allowing for extended functionality in {% data variables.product.company_short %}'s {% data variables.copilot.copilot_chat_short %}. This is how we will refer to extensions from the perspective of an extension user. - -#### {% data variables.product.prodname_copilot_short %} extensibility platform - -The system that handles authentication and proxies requests between clients and agent plugins. - -#### {% data variables.copilot.copilot_vsc_chat_participant %} - -Also known as {% data variables.product.prodname_vscode %} Chat extensions, {% data variables.copilot.copilot_vsc_chat_participants %} are built as a {% data variables.product.prodname_vscode %} extension rather than a {% data variables.product.prodname_github_app %}. These extensions are exclusive to {% data variables.product.prodname_vscode_shortname %} and can be downloaded from the {% data variables.product.prodname_vscode_shortname %} Marketplace. - -#### {% data variables.product.prodname_github_app %} - -The foundation for a {% data variables.copilot.copilot_extension_short %} that provides the necessary infrastructure, permissions, and context from {% data variables.product.company_short %}, such as user, repo and organization metadata. - -#### {% data variables.product.prodname_marketplace %} - -The platform where {% data variables.product.company_short %} approved {% data variables.copilot.copilot_extensions %} can be listed publicly and discovered by users. - -#### Listed/published extension - -An extension that appears on the {% data variables.product.prodname_marketplace %}. These extensions must be reviewed and approved by {% data variables.product.company_short %}. - -#### Private extension - -An extension that is only visible and usable by the enterprise, organization, or individual user that created it. Enterprise-created extensions can be installed by organizations that are within the enterprise. - -#### Public extension - -An extension that is visible and installable by any {% data variables.product.company_short %} user or organization. - -#### Skill - -A piece of code that retrieves context or executes an action in response to a user’s prompt (for example, "findIssueByID(id: number)"). For a list of a skills, see [Currently available skills](/copilot/using-github-copilot/asking-github-copilot-questions-in-your-ide#currently-available-skills). - -#### Skillset - -A type of {% data variables.copilot.copilot_extension_short %} implementation that gives developers the ability to connect external services and custom API endpoints to {% data variables.product.prodname_copilot_short %} with minimal complexity. The {% data variables.copilot.copilot_extensibility_platform_short %} handles prompt crafting, function evaluation, and response generation. The builder only needs to handle API skill definitions. This approach is ideal for builders who want minimal complexity. - -#### Tool/function calling - -A capability of {% data variables.product.prodname_copilot_short %}'s LLM (as well as Open AI’s) that allows them to invoke specific tools or functions. Extension builders can define available tools with parameters, enabling the LLM to select and call appropriate tools to fulfill a user’s request. “Functions” are a subset of “tools” and the “function calling” term will be {% data variables.release-phases.closing_down %}. - -#### Unlisted extension - -An extension that is not published on the {% data variables.product.prodname_marketplace %}. Builders may develop and distribute public unlisted extensions without requiring review or approval from {% data variables.product.company_short %}. {% data variables.product.company_short %} does not guarantee the security or quality of unlisted extensions. - -#### Verified creator - -A status required for organizations to publish extensions on the {% data variables.product.prodname_marketplace %}. diff --git a/content/copilot/reference/index.md b/content/copilot/reference/index.md index c79fd86e3247..fcd1ee3fe4e3 100644 --- a/content/copilot/reference/index.md +++ b/content/copilot/reference/index.md @@ -16,7 +16,6 @@ children: - /metrics-data - /copilot-billing - /agentic-audit-log-events - - /extensions-glossary - /copilot-usage-metrics contentType: reference --- diff --git a/content/copilot/reference/policy-conflicts.md b/content/copilot/reference/policy-conflicts.md index 817566746384..da063328f39a 100644 --- a/content/copilot/reference/policy-conflicts.md +++ b/content/copilot/reference/policy-conflicts.md @@ -48,7 +48,6 @@ Feature, model, and privacy settings for users are set according to the **least | {% data variables.copilot.copilot_code-review_short %} | Least restrictive organization | [AUTOTITLE](/copilot/responsible-use/code-review) | | {% data variables.copilot.copilot_coding_agent %} | Least restrictive organization | [AUTOTITLE](/copilot/responsible-use-of-github-copilot-features/responsible-use-of-copilot-coding-agent-on-githubcom) | | {% data variables.product.prodname_spark_short %} | Least restrictive organization | [AUTOTITLE](/copilot/responsible-use/spark) | -| {% data variables.copilot.copilot_extensions_short %} | Least restrictive organization | [AUTOTITLE](/copilot/concepts/copilot-extensions/about-copilot-extensions) | | {% data variables.product.prodname_copilot_short %} in {% data variables.product.prodname_dotcom_the_website %} | Least restrictive organization | [AUTOTITLE](/copilot/responsible-use/chat-in-github) | | {% data variables.copilot.copilot_desktop_short %} | Least restrictive organization | [AUTOTITLE](/copilot/responsible-use/copilot-in-github-desktop) | | {% data variables.copilot.copilot_cli_short %} | Least restrictive organization | [AUTOTITLE](/copilot/responsible-use/copilot-cli) | diff --git a/content/copilot/tutorials/enhance-agent-mode-with-mcp.md b/content/copilot/tutorials/enhance-agent-mode-with-mcp.md index e531aa0be1aa..98f950c38d49 100644 --- a/content/copilot/tutorials/enhance-agent-mode-with-mcp.md +++ b/content/copilot/tutorials/enhance-agent-mode-with-mcp.md @@ -9,6 +9,8 @@ topics: - Copilot redirect_from: - /copilot/tutorials/enhancing-copilot-agent-mode-with-mcp + - /copilot/how-tos/use-copilot-extensions/build-a-copilot-agent/use-context-passing + - /copilot/tutorials/try-extensions contentType: tutorials category: - Automate simple user stories diff --git a/content/copilot/tutorials/index.md b/content/copilot/tutorials/index.md index 57e753dd0b5d..86356d8fa2de 100644 --- a/content/copilot/tutorials/index.md +++ b/content/copilot/tutorials/index.md @@ -26,7 +26,6 @@ children: - /migrate-a-project - /plan-a-project - /upgrade-projects - - /try-extensions redirect_from: - /copilot/using-github-copilot/guides-on-using-github-copilot contentType: tutorials diff --git a/content/copilot/tutorials/try-extensions.md b/content/copilot/tutorials/try-extensions.md deleted file mode 100644 index 88334cb83bf5..000000000000 --- a/content/copilot/tutorials/try-extensions.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: Quickstart for GitHub Copilot Extensions using agents -defaultTool: vscode -intro: 'Build and try out {% data variables.product.github %}''s Blackbeard extension to learn about the development process for {% data variables.copilot.copilot_extensions %}.' -versions: - feature: copilot-extensions -redirect_from: - - /copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-a-demo-agent - - /copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions - - /copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions-using-agents - - /copilot/how-tos/build-copilot-extensions/quickstart-for-github-copilot-extensions-using-agents - - /copilot/tutorials/quickstart-for-github-copilot-extensions-using-agents -topics: - - Copilot -shortTitle: Try Extensions -contentType: tutorials -category: - - Rapid prototyping - - Integrate Copilot with your tools ---- - -The [Blackbeard extension](https://github.com/copilot-extensions/blackbeard-extension) is a {% data variables.copilot.copilot_extension %} that comprises a {% data variables.product.prodname_github_app %} and a {% data variables.product.prodname_copilot_short %} agent. The agent responds to chat requests in the style of a pirate, using {% data variables.product.prodname_copilot_short %}'s large language model (LLM) API and special system prompts. See [AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/about-copilot-agents). - -This guide uses a simple agent implementation, but the process is similar for skillsets. For information about the difference between agents and skillsets, see [AUTOTITLE](/copilot/concepts/copilot-extensions/about-copilot-extensions). - -This quickstart is designed to help you build and chat with the Blackbeard extension as quickly as possible, so you can develop and test your extension without deploying infrastructure. For production, you'll need to host the application for your agent or skillset's endpoints on a publicly accessible server. To instead learn how to create a new {% data variables.copilot.copilot_extension %}, see [AUTOTITLE](/copilot/building-copilot-extensions/setting-up-copilot-extensions). - -## 1. Create and install a {% data variables.product.prodname_github_app %} - -In the developer settings for your {% data variables.product.github %} account, create a {% data variables.product.prodname_github_app %}. Your {% data variables.product.prodname_github_app %} must have: -* A name -* A homepage URL -* Webhooks deselected - -After you create your app, click **Install App** in the sidebar, then install your app on your account. - -For detailed instructions, see [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension#creating-a-github-app). - -{% vscode %} - -## 2. Clone and host the Blackbeard agent locally - -Rather than deploying the Blackbeard agent as a web app, you can host your agent locally for a significantly faster build process. - -1. Using the Terminal built into {% data variables.product.prodname_vscode_shortname %}, clone the [`copilot-extensions/blackbeard-extension`](https://github.com/copilot-extensions/blackbeard-extension) repository. -1. In the same Terminal, run `npm install` to install the necessary dependencies, then run `npm start` to start the Blackbeard agent on port 3000. -1. In the "Ports" tab of the {% data variables.product.prodname_vscode_shortname %} panel, click **Forward a port** or **Add port**, then add port 3000. -1. Right-click the port and set the visibility to "Public," then copy the local address. - -## 3. Integrate and test the Blackbeard extension - -After you set up your {% data variables.product.prodname_github_app %} and Blackbeard agent, you can integrate the agent with your app and test the Blackbeard extension. You need to make the following changes to your {% data variables.product.prodname_github_app %} settings: -* In the "General" settings, in the "Callback URL" field, paste the local address for your agent. -* In the "Permissions & events" settings, grant read-only permissions to {% data variables.copilot.copilot_chat_short %}. -* In the "{% data variables.product.prodname_copilot_short %}" settings, set your app type to "Agent," then fill out the remaining fields. - -After you update your {% data variables.product.prodname_github_app %} settings, you can start chatting with your extension by typing `@YOUR-EXTENSION-NAME` in the {% data variables.copilot.copilot_chat_short %} window, then sending a prompt as normal. - -For more detailed instructions, see [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent#configuring-your-github-app). - -{% endvscode %} - -{% codespaces %} - -## 2. Clone and host the Blackbeard agent in a codespace - -Rather than deploying the Blackbeard agent as a web app, you can host your agent in a codespace for a significantly faster build process. - -1. Navigate to the [`copilot-extensions/blackbeard-extension`](https://github.com/copilot-extensions/blackbeard-extension) repository. Select the **{% octicon "code" aria-hidden="true" aria-label="code" %} Code** {% octicon "triangle-down" aria-hidden="true" aria-label="triangle-down" %} dropdown menu, then click **Create codespace on main**. -1. To find your new codespace, select the **{% octicon "code" aria-hidden="true" aria-label="code" %} Code** {% octicon "triangle-down" aria-hidden="true" aria-label="triangle-down" %} dropdown menu. Next to your new codespace, select {% octicon "kebab-horizontal" aria-label="Show more actions for codespace" %}, then click **{% octicon "globe" aria-hidden="true" aria-label="globe" %} Open in Browser**. -1. In the integrated Terminal, run `npm start` to start the Blackbeard agent on port 3000. -1. In the "Ports" tab of the {% data variables.product.prodname_vscode_shortname %} panel, click **Forward a port**, then add port 3000. -1. Right-click the port and set the visibility to "Public," then copy the local address. - -## 3. Integrate and test the Blackbeard extension - -After you set up your {% data variables.product.prodname_github_app %} and Blackbeard agent, you can integrate the agent with your app and test the Blackbeard extension. You need to make the following changes to your {% data variables.product.prodname_github_app %} settings: -* In the "General" settings, in the "Callback URL" field, paste the forwarded address for your agent. -* In the "Permissions & events" settings, grant read-only permissions to {% data variables.copilot.copilot_chat_short %}. -* In the "{% data variables.product.prodname_copilot_short %}" settings, set your app type to "Agent," then fill out the remaining fields. - -After you update your {% data variables.product.prodname_github_app %} settings, you can start chatting with your extension by typing `@YOUR-EXTENSION-NAME` in the {% data variables.copilot.copilot_chat_short %} window of a supported client or IDE, then sending a prompt as normal. For a list of supported clients and IDEs, see [AUTOTITLE](/copilot/concepts/copilot-extensions/about-copilot-extensions#supported-clients-and-ides). - -> [!NOTE] Chatting with {% data variables.copilot.copilot_extensions %} in {% data variables.product.prodname_github_codespaces %} is not supported. - -For more detailed instructions, see [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent#configuring-your-github-app). - -{% endcodespaces %} - -{% bash %} - -## 2. Clone and start the Blackbeard agent locally - -Rather than deploying the Blackbeard agent as a web app, you can host your agent locally for a significantly faster build process. - -1. Using your command line application, clone the [`copilot-extensions/blackbeard-extension`](https://github.com/copilot-extensions/blackbeard-extension) repository. -1. Run `npm install` to install the necessary dependencies, then run `npm start` to start the Blackbeard agent on port 3000. - -## 3. Expose your local server - -To make the Blackbeard agent accessible to the {% data variables.product.prodname_copilot_short %} platform and {% data variables.product.github %}, you need to expose your local server so it's reachable by HTTP requests. You can use any port forwarding or tunneling service to achieve this. For the following steps, we'll use ngrok. - -1. Navigate to [ngrok's download page](https://ngrok.com/downloads/), then install the appropriate version of ngrok for your operating system. -1. Navigate to the [ngrok setup and installation page](https://dashboard.ngrok.com/get-started/setup/), then log in or sign up for an ngrok account. -1. To expose your local server, in a new window of your command line application, run the following command: - - ```shell copy - ngrok http http://localhost:3000 - ``` - -1. In your command line application, next to "Forwarding," copy the URL that ngrok assigned to your server. - -## 4. Integrate and test the Blackbeard extension - -To integrate your {% data variables.product.prodname_github_app %} with the Blackbeard agent, you need to make the following changes to your app settings: -* In the "General" settings, in the "Callback URL" field, paste the URL for your exposed server. -* In the "Permissions & events" settings, grant read-only permissions to {% data variables.copilot.copilot_chat_short %}. -* In the "{% data variables.product.prodname_copilot_short %}" settings, set your app type to "Agent," then fill out the remaining fields. - -After you update your {% data variables.product.prodname_github_app %} settings, you can start chatting with your extension by typing `@YOUR-EXTENSION-NAME` in the {% data variables.copilot.copilot_chat_short %} window, then sending a prompt as normal. - -For more detailed instructions, see [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent#configuring-your-github-app). - -{% endbash %} - -## Next steps - -Now that you have a working {% data variables.copilot.copilot_extension %}, you can try building on the Blackbeard agent to experiment with agent development. - -To learn about more complex agent implementations, you can also review the following example agents and software development kit (SDK), all of which are available in the [`copilot-extensions`](https://github.com/copilot-extensions) organization: - -* [{% data variables.product.prodname_github_models %}](https://github.com/copilot-extensions/github-models-extension): A more complex agent that lets you ask about and interact with various LLMs listed on the {% data variables.product.prodname_marketplace %} through {% data variables.copilot.copilot_chat_short %}. The {% data variables.product.prodname_github_models %} agent makes use of function calling. -* [Function Calling](https://github.com/copilot-extensions/function-calling-extension): An example agent written in Go that demonstrates function calling and confirmation dialogs. -* [RAG Extension](https://github.com/copilot-extensions/rag-extension): An example agent written in Go that demonstrates a simple implementation of retrieval augmented generation. -* [Preview SDK](https://github.com/copilot-extensions/preview-sdk.js/tree/main): An SDK that streamlines the development of {% data variables.copilot.copilot_extensions_short %} by handling request verification, payload parsing, and response formatting automatically. This SDK allows extension builders to focus more on creating core functionality and less on boilerplate code. diff --git a/content/get-started/using-github/github-mobile.md b/content/get-started/using-github/github-mobile.md index 3eb81bbd0e0c..15f7312dcdc4 100644 --- a/content/get-started/using-github/github-mobile.md +++ b/content/get-started/using-github/github-mobile.md @@ -38,8 +38,7 @@ The following documentation contains more information about using {% data variab * Using {% data variables.product.prodname_dotcom %} code search on {% data variables.product.prodname_mobile %}, see [AUTOTITLE](/search-github/github-code-search/using-github-code-search#using-github-code-search-on-github-mobile).{% endif %}{% ifversion fpt or ghec %} * Two-factor authentication using {% data variables.product.prodname_mobile %}, see [AUTOTITLE](/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication#configuring-two-factor-authentication-using-github-mobile) and [Authenticating using {% data variables.product.prodname_mobile %}](/authentication/securing-your-account-with-two-factor-authentication-2fa/accessing-github-using-two-factor-authentication#verifying-with-github-mobile). {% endif %}{% ifversion copilot-chat-for-mobile %} * Using {% data variables.copilot.copilot_mobile %}, see [AUTOTITLE](/copilot/github-copilot-chat/copilot-chat-in-github-mobile/using-github-copilot-chat-in-github-mobile).{% endif %}{% ifversion copilot-chat-for-mobile %} -* Assigning issues to {% data variables.product.prodname_copilot_short %} from {% data variables.product.prodname_mobile %}, see [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/assign-copilot-to-an-issue).{% endif %}{% ifversion copilot-chat-for-mobile %} -* Using {% data variables.copilot.copilot_extensions %} in {% data variables.product.prodname_mobile %}, see [Extending {% data variables.copilot.copilot_chat_short %} in {% data variables.product.prodname_mobile %}](/copilot/using-github-copilot/copilot-chat/asking-github-copilot-questions-in-github-mobile#extending-copilot-chat-in-github-mobile).{% endif %} +* Assigning issues to {% data variables.product.prodname_copilot_short %} from {% data variables.product.prodname_mobile %}, see [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/assign-copilot-to-an-issue).{% endif %} ## Installing {% data variables.product.prodname_mobile %} diff --git a/content/github-models/use-github-models/index.md b/content/github-models/use-github-models/index.md index a34d9edafca4..4378528e9b7c 100644 --- a/content/github-models/use-github-models/index.md +++ b/content/github-models/use-github-models/index.md @@ -8,5 +8,4 @@ children: - /optimizing-your-ai-powered-app-with-github-models - /evaluating-ai-models - /storing-prompts-in-github-repositories - - /integrating-ai-models-into-your-development-workflow --- diff --git a/content/github-models/use-github-models/integrating-ai-models-into-your-development-workflow.md b/content/github-models/use-github-models/integrating-ai-models-into-your-development-workflow.md deleted file mode 100644 index f5901cf4763a..000000000000 --- a/content/github-models/use-github-models/integrating-ai-models-into-your-development-workflow.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Integrating AI models into your development workflow -intro: 'Call AI models in the tools you use every day.' -versions: - feature: github-models -shortTitle: Integrate AI models -redirect_from: - - /github-models/integrating-ai-models-into-your-development-workflow ---- - -With {% data variables.product.prodname_github_models %} extensions, you can call specific AI models from both {% data variables.copilot.copilot_chat_short %} and {% data variables.product.prodname_cli %}. These extensions integrate directly into your development workflow, allowing you to prompt models without context switching. - -## Using AI models in {% data variables.copilot.copilot_chat_short %} - -If you have a {% data variables.product.prodname_copilot_short %} subscription, you can work with AI models in {% data variables.copilot.copilot_chat_short %} in two different ways: -* Using the {% data variables.product.prodname_github_models %} {% data variables.copilot.copilot_extension_short %}. With this extension, you can ask for model recommendations based on certain criteria and chat with specific models. See [Using the {% data variables.product.prodname_github_models %} {% data variables.copilot.copilot_extension_short %}](#using-the-github-models-copilot-extension). -* Using multiple model support in {% data variables.copilot.copilot_chat_short %}. With multi-model {% data variables.copilot.copilot_chat_short %}, you can choose a specific model to use for a conversation, then prompt {% data variables.copilot.copilot_chat_short %} as usual. See [AUTOTITLE](/copilot/using-github-copilot/ai-models/changing-the-ai-model-for-copilot-chat). - -### Using the {% data variables.product.prodname_github_models %} {% data variables.copilot.copilot_extension_short %} - -> [!NOTE] The {% data variables.product.prodname_github_models %} {% data variables.copilot.copilot_extension_short %} is in {% data variables.release-phases.public_preview %} and is subject to change. - -1. Install the [{% data variables.product.prodname_github_models %} {% data variables.copilot.copilot_extension_short %}](https://github.com/marketplace/models-github). - * If you have a {% data variables.copilot.copilot_pro_short %} subscription, you can install the extension on your personal account. - * If you have access to {% data variables.product.prodname_copilot_short %} through a {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} subscription: - * An organization owner or enterprise owner needs to enable the {% data variables.copilot.copilot_extensions_short %} policy for your organization or enterprise. - * An organization owner needs to install the extension for your organization. - -1. Open any implementation of {% data variables.copilot.copilot_chat_short %} that supports {% data variables.copilot.copilot_extensions %}. For a list of supported {% data variables.copilot.copilot_chat_short %} implementations, see [AUTOTITLE](/copilot/using-github-copilot/using-extensions-to-integrate-external-tools-with-copilot-chat#supported-clients-and-ides). -1. In the chat window, type `@models YOUR-PROMPT`, then send your prompt. There are several use cases for the {% data variables.product.prodname_github_models %} {% data variables.copilot.copilot_extension_short %}, including: - * Recommending a particular model based on context and criteria you provide. For example, you can ask for a low-cost OpenAI model that supports function calling. - * Executing prompts using a particular model. This is especially useful when you want to use a model that is not currently available in multi-model {% data variables.copilot.copilot_chat_short %}. - * Listing models currently available through {% data variables.product.prodname_github_models %} - -## Using AI models with {% data variables.product.prodname_actions %} - -You can use the {% data variables.product.prodname_actions %} token (`GITHUB_TOKEN`) to call AI models directly inside your workflows. - -### Setting permissions - -To use AI models in your workflows, ensure that the `models` permission is enabled in your workflow configuration. This permission allows workflows to access the {% data variables.product.prodname_github_models %} inference API. You can either set this permission itself or use the general `read-all` or `write-all` permissions. See [AUTOTITLE](/rest/overview/permissions-required-for-github-apps?apiVersion=2022-11-28#repository-permissions-for-actions). - -### Writing your workflow file - -You can call the inference API directly from your workflow. For instance: - -```yaml -name: Use GitHub Models - -on: - workflow_dispatch: - -permissions: - models: read - -jobs: - call-model: - runs-on: ubuntu-latest - steps: - - name: Call AI model - env: - GITHUB_TOKEN: {% raw %}${{ secrets.GITHUB_TOKEN }}{% endraw %} - run: | - curl "https://models.github.ai/inference/chat/completions" \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer $GITHUB_TOKEN" \ - -d '{ - "messages": [ - { - "role": "user", - "content": "Explain the concept of recursion." - } - ], - "model": "openai/gpt-4o" - }' -``` - -## Using AI models from the command line - -> [!NOTE] The {% data variables.product.prodname_github_models %} extension for {% data variables.product.prodname_cli %} is in {% data variables.release-phases.public_preview %} and is subject to change. - -You can use the {% data variables.product.prodname_github_models %} extension for {% data variables.product.prodname_cli %} to prompt AI models from the command line, and even pipe in the output of a command as context. - -### Prerequisites - -To use the {% data variables.product.prodname_github_models %} CLI extension, you must install {% data variables.product.prodname_cli %}. {% data reusables.cli.cli-installation %} - -### Installing the extension - -1. If you have not already authenticated to the {% data variables.product.prodname_cli %}, run the following command in your terminal. - - ```shell copy - gh auth login - ``` - -1. To install the {% data variables.product.prodname_github_models %} extension, run the following command. - - ```shell copy - gh extension install https://github.com/github/gh-models - ``` - -### Using the extension - -To see a list of all available commands, run `gh models`. - -There are a few key ways you can use the extension: - * **To ask a model multiple questions using a chat experience**, run `gh models run`. Select your model from the listed models, then send your prompts. - * **To ask a model a single question**, run `gh models run MODEL-NAME "QUESTION"` in your terminal. For example, to ask the {% data variables.copilot.copilot_gpt_41 %} model why the sky is blue, you can run `gh models run openai/gpt-4.1 "why is the sky blue?"`. - * **To provide the output of a command as context when you call a model**, you can join a separate command and the call to the model with the pipe character (`|`). For example, to summarize the README file in the current directory using the {% data variables.copilot.copilot_gpt_41 %} model, you can run `cat README.md | gh models run openai/gpt-4.1 "summarize this text"`. diff --git a/content/index.md b/content/index.md index 7cd8cc2faef2..008d4d075858 100644 --- a/content/index.md +++ b/content/index.md @@ -157,7 +157,6 @@ childGroups: - rest - graphql - webhooks - - copilot/how-tos/use-copilot-extensions - github-models - name: Community octicon: GlobeIcon diff --git a/data/release-notes/enterprise-server/3-14/19.yml b/data/release-notes/enterprise-server/3-14/19.yml new file mode 100644 index 000000000000..d4eb901d3c7e --- /dev/null +++ b/data/release-notes/enterprise-server/3-14/19.yml @@ -0,0 +1,54 @@ +date: '2025-10-29' +sections: + security_fixes: + - | + **CRITICAL:** Redis has been upgraded to version 6.2.20 to address CVE-2025-49844 (also known as RediShell). Administrators should apply this update promptly to mitigate potential security risks. + - | + **HIGH:** A privilege escalation vulnerability in GitHub Enterprise Server allowed an authenticated enterprise admin to gain root SSH access. The exploit used a symlink escape in pre-receive hook environments. An attacker could craft a malicious repository and environment to replace system binaries during hook cleanup. This allowed them to execute a payload that added their SSH key to the root user's authorized keys, granting root SSH access. The attacker needed enterprise admin privileges to exploit this vulnerability. This has been assigned CVE-2025-11578 and was reported through the GitHub Bug Bounty program. + - | + **HIGH:** An attacker could execute arbitrary code in the context of other users' browsers by supplying a malicious `label:` value that was injected into the DOM without proper sanitization. This could be triggered when a user visits a crafted Issues search URL, enabling session hijacking, account takeover, and recovery code exfiltration. GitHub has requested CVE ID [CVE-2025-11892](https://www.cve.org/cverecord?id=CVE-2025-11892) for this vulnerability, which was reported via the [GitHub Bug Bounty program](https://bounty.github.com/). + - | + Packages have been updated to the latest security versions. + bugs: + - | + Users applying a new license file received an HTTP 500 error. + - | + SVG files stored in Git Large File Storage (LFS) failed to render on the web interface. + - | + On the "Scheduled workflows" page in the site admin dashboard, actors attributed to workflows appeared as "Not found". + changes: + - | + Elasticsearch deprecation warnings, which are logged to index files in new versions of Elasticsearch, have been disabled. These warnings provided no value to administrators, and in some cases could block upgrades of instances in high-availability or cluster configurations. + known_issues: + - | + During the validation phase of a configuration run, a `No such object` error may occur for the Notebook and Viewscreen services. This error can be ignored as the services should still correctly start. + - | + If the root site administrator is locked out of the Management Console after failed login attempts, the account does not unlock automatically after the defined lockout time. Someone with administrative SSH access to the instance must unlock the account using the administrative shell. For more information, see [AUTOTITLE](/admin/configuration/administering-your-instance-from-the-management-console/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + On an instance with the HTTP `X-Forwarded-For` header configured for use behind a load balancer, all client IP addresses in the instance's audit log erroneously appear as 127.0.0.1. + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Admin stats REST API endpoints may timeout on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + When following the steps for [Replacing the primary MySQL node](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-the-primary-mysql-node), step 14 (running `ghe-cluster-config-apply`) might fail with errors. If this occurs, re-running `ghe-cluster-config-apply` is expected to succeed. + - | + Running a config apply as part of the steps for [Replacing a node in an emergency](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-a-node-in-an-emergency) may fail with errors if the node being replaced is still reachable. If this occurs, shut down the node and repeat the steps. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring data originally backed up from a 3.13 or greater appliance version, the Elasticsearch indices need to be reindexed before some of the data will show up. This happens via a nightly scheduled job. You can also trigger the reindexing by running `/usr/local/share/enterprise/ghe-es-search-repair`. + - | + An organization-level code scanning configuration page is displayed on instances that do not use GitHub Advanced Security or code scanning. + - | + In the header bar displayed to site administrators, some icons are not available. + - | + When enabling automatic update checks for the first time in the Management Console, the status is not dynamically reflected until the "Updates" page is reloaded. + - | + When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. + - | + After a restore, existing outside collaborators cannot be added to repositories in a new organization. This issue can be resolved by running `/usr/local/share/enterprise/ghe-es-search-repair` on the appliance. + - | + After a geo-replica is promoted to be a primary by running `ghe-repl-promote`, the actions workflow of a repository does not have any suggested workflows. + - | + Unexpected elements may appear in the UI on the repository overview page for locked repositories. diff --git a/data/release-notes/enterprise-server/3-15/14.yml b/data/release-notes/enterprise-server/3-15/14.yml new file mode 100644 index 000000000000..09d73963f522 --- /dev/null +++ b/data/release-notes/enterprise-server/3-15/14.yml @@ -0,0 +1,68 @@ +date: '2025-10-29' +sections: + security_fixes: + - | + **CRITICAL:** Redis has been upgraded to version 6.2.20 to address CVE-2025-49844 (also known as RediShell). Administrators should apply this update promptly to mitigate potential security risks. + - | + **HIGH:** A privilege escalation vulnerability in GitHub Enterprise Server allowed an authenticated enterprise admin to gain root SSH access. The exploit used a symlink escape in pre-receive hook environments. An attacker could craft a malicious repository and environment to replace system binaries during hook cleanup. This allowed them to execute a payload that added their SSH key to the root user's authorized keys, granting root SSH access. The attacker needed enterprise admin privileges to exploit this vulnerability. This has been assigned CVE-2025-11578 and was reported through the GitHub Bug Bounty program. + - | + **HIGH:** An attacker could execute arbitrary code in the context of other users' browsers by supplying a malicious `label:` value that was injected into the DOM without proper sanitization. This could be triggered when a user visits a crafted Issues search URL, enabling session hijacking, account takeover, and recovery code exfiltration. GitHub has requested CVE ID [CVE-2025-11892](https://www.cve.org/cverecord?id=CVE-2025-11892) for this vulnerability, which was reported via the [GitHub Bug Bounty program](https://bounty.github.com/). + - | + Packages have been updated to the latest security versions. + bugs: + - | + Users applying a new license file received an HTTP 500 error. + - | + Administrators running the `ghe-repl-start-all` command may have encountered replicas remaining in an enabled state after a failed operation, causing subsequent configuration updates to execute on unintended nodes. Replicas now revert to a disabled state if the command fails. + - | + Setting up MySQL replication on secondary replica nodes was inefficient and consumed unnecessary root disk space. + - | + When running the `system-requirements` check as part of the `ghe-cluster-config-check` command prior to the initialization of a new cluster, the check request would fail because it exceeded the overall request timeout. + - | + SVG files stored in Git Large File Storage (LFS) failed to render on the web interface. + - | + Announcements scheduled using the `expires_at` timestamp in ISO 8601 format were not parsing the specified time correctly, resulting in the time component always being ignored. + - | + On the "Scheduled workflows" page in the site admin dashboard, actors attributed to workflows appeared as "Not found". + - | + On instances where GitHub Actions workflows require approval to run on pull requests from forked repositories, workflows remained queued indefinitely after users clicked "Approve and run". + changes: + - | + Elasticsearch deprecation warnings, which are logged to index files in new versions of Elasticsearch, have been disabled. These warnings provided no value to administrators, and in some cases could block upgrades of instances in high-availability or cluster configurations. + known_issues: + - | + Custom firewall rules are removed during the upgrade process. + - | + During the validation phase of a configuration run, a `No such object` error may occur for the Notebook and Viewscreen services. This error can be ignored as the services should still correctly start. + - | + If the root site administrator is locked out of the Management Console after failed login attempts, the account does not unlock automatically after the defined lockout time. Someone with administrative SSH access to the instance must unlock the account using the administrative shell. For more information, see [AUTOTITLE](/admin/configuration/administering-your-instance-from-the-management-console/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + On an instance with the HTTP `X-Forwarded-For` header configured for use behind a load balancer, all client IP addresses in the instance's audit log erroneously appear as 127.0.0.1. + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Admin stats REST API endpoints may timeout on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + When following the steps for [Replacing the primary MySQL node](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-the-primary-mysql-node), step 14 (running `ghe-cluster-config-apply`) might fail with errors. If this occurs, re-running `ghe-cluster-config-apply` is expected to succeed. + - | + Running a config apply as part of the steps for [Replacing a node in an emergency](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-a-node-in-an-emergency) may fail with errors if the node being replaced is still reachable. If this occurs, shut down the node and repeat the steps. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring data originally backed up from a 3.13 or greater appliance version, the Elasticsearch indices need to be reindexed before some of the data will show up. This happens via a nightly scheduled job. You can also trigger the reindexing by running `/usr/local/share/enterprise/ghe-es-search-repair`. + - | + An organization-level code scanning configuration page is displayed on instances that do not use GitHub Advanced Security or code scanning. + - | + In the header bar displayed to site administrators, some icons are not available. + - | + When enabling automatic update checks for the first time in the Management Console, the status is not dynamically reflected until the "Updates" page is reloaded. + - | + When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. + - | + When initializing a new GHES cluster, nodes with the `consul-server` role should be added to the cluster before adding more nodes. Adding all nodes simultaneously creates a race condition between nomad server registration and nomad client registration. + - | + Admins setting up cluster high availability (HA) may encounter a spokes error when running `ghe-cluster-repl-status` if a new organization and repositories are created before using the `ghe-cluster-repl-bootstrap` command. To avoid this issue, complete the cluster HA setup with `ghe-cluster-repl-bootstrap` before creating new organizations and repositories. + - | + After a restore, existing outside collaborators cannot be added to repositories in a new organization. This issue can be resolved by running `/usr/local/share/enterprise/ghe-es-search-repair` on the appliance. + - | + Unexpected elements may appear in the UI on the repository overview page for locked repositories. diff --git a/data/release-notes/enterprise-server/3-16/10.yml b/data/release-notes/enterprise-server/3-16/10.yml new file mode 100644 index 000000000000..86a00c3b6b74 --- /dev/null +++ b/data/release-notes/enterprise-server/3-16/10.yml @@ -0,0 +1,86 @@ +date: '2025-10-29' +sections: + security_fixes: + - | + **CRITICAL:** Redis has been upgraded to version 6.2.20 to address CVE-2025-49844 (also known as RediShell). Administrators should apply this update promptly to mitigate potential security risks. + - | + **HIGH:** A privilege escalation vulnerability in GitHub Enterprise Server allowed an authenticated enterprise admin to gain root SSH access. The exploit used a symlink escape in pre-receive hook environments. An attacker could craft a malicious repository and environment to replace system binaries during hook cleanup. This allowed them to execute a payload that added their SSH key to the root user's authorized keys, granting root SSH access. The attacker needed enterprise admin privileges to exploit this vulnerability. This has been assigned CVE-2025-11578 and was reported through the GitHub Bug Bounty program. + - | + **HIGH:** An attacker could execute arbitrary code in the context of other users' browsers by supplying a malicious `label:` value that was injected into the DOM without proper sanitization. This could be triggered when a user visits a crafted Issues search URL, enabling session hijacking, account takeover, and recovery code exfiltration. GitHub has requested CVE ID [CVE-2025-11892](https://www.cve.org/cverecord?id=CVE-2025-11892) for this vulnerability, which was reported via the [GitHub Bug Bounty program](https://bounty.github.com/). + - | + Authenticated users could target the internal aqueduct-lite endpoints by using a domain name to circumvent checks. This fix addresses this Server-Side Request Forgery (SSRF) vulnerability by blocking connections to loopback addresses after resolving the domain name for the webhook delivery address. + - | + Packages have been updated to the latest security versions. + bugs: + - | + Users applying a new license file received an HTTP 500 error. + - | + Administrators running the `ghe-repl-start-all` command may have encountered replicas remaining in an enabled state after a failed operation, causing subsequent configuration updates to execute on unintended nodes. Replicas now revert to a disabled state if the command fails. + - | + Setting up MySQL replication on secondary replica nodes was inefficient and consumed unnecessary root disk space. + - | + After an upgrade, administrators found that Elasticsearch allocation remained set to "none," causing subsequent upgrades to fail. Enterprise upgrades now correctly set allocation to "all" after configuration is applied, preventing upgrade blocks. + - | + When running the `system-requirements` check as part of the `ghe-cluster-config-check` command prior to the initialization of a new cluster, the check request would fail because it exceeded the overall request timeout. + - | + SVG files stored in Git Large File Storage (LFS) failed to render on the web interface. + - | + Creating an organization would fail with a 500 or validation error if a maximum lifetime policy for {% data variables.product.pat_generic_plural %} was set to less than 366 days in the enterprise settings. + - | + Announcements scheduled using the `expires_at` timestamp in ISO 8601 format were not parsing the specified time correctly, resulting in the time component always being ignored. + - | + On the "Scheduled workflows" page in the site admin dashboard, actors attributed to workflows appeared as "Not found". + - | + On instances with thousands of organizations and roles, opening the security overview page for an organization or any other organization-level pages accessible via the Security tab triggered inefficient database queries that could degrade performance for other users. + - | + Administrators who had upgraded to the previous patch release may have observed a significant increase in executions of the `SecurityOverviewAnalytics::UpdateFeatureStatusSummaryJob`, causing background job queue saturation, service delays, reduced stability, and lower performance for environments using security overview analytics. + - | + On instances where GitHub Actions workflows require approval to run on pull requests from forked repositories, workflows remained queued indefinitely after users clicked "Approve and run". + - | + The GitHub system user was not always properly set on startup, occasionally surfacing in authentication errors or failed secret scanning jobs in logs. + changes: + - | + Elasticsearch deprecation warnings, which are logged to index files in new versions of Elasticsearch, have been disabled. These warnings provided no value to administrators, and in some cases could block upgrades of instances in high-availability or cluster configurations. + - | + Logging of configuration runs is improved with streamlined logging for different configuration phases. Phase-specific logs are written to both the main log file (`ghe-config.log`) and the console for better visibility. + known_issues: + - | + Custom firewall rules are removed during the upgrade process. + - | + During the validation phase of a configuration run, a `No such object` error may occur for the Notebook and Viewscreen services. This error can be ignored as the services should still correctly start. + - | + If the root site administrator is locked out of the Management Console after failed login attempts, the account does not unlock automatically after the defined lockout time. Someone with administrative SSH access to the instance must unlock the account using the administrative shell. For more information, see [AUTOTITLE](/admin/configuration/administering-your-instance-from-the-management-console/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + On an instance with the HTTP `X-Forwarded-For` header configured for use behind a load balancer, all client IP addresses in the instance's audit log erroneously appear as 127.0.0.1. + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Admin stats REST API endpoints may timeout on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + When following the steps for [Replacing the primary MySQL node](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-the-primary-mysql-node), step 14 (running `ghe-cluster-config-apply`) might fail with errors. If this occurs, re-running `ghe-cluster-config-apply` is expected to succeed. + - | + Running a config apply as part of the steps for [Replacing a node in an emergency](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-a-node-in-an-emergency) may fail with errors if the node being replaced is still reachable. If this occurs, shut down the node and repeat the steps. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring data originally backed up from a 3.13 or greater appliance version, the Elasticsearch indices need to be reindexed before some of the data will show up. This happens via a nightly scheduled job. You can also trigger the reindexing by running `/usr/local/share/enterprise/ghe-es-search-repair`. + - | + An organization-level code scanning configuration page is displayed on instances that do not use GitHub Advanced Security or code scanning. + - | + When enabling automatic update checks for the first time in the Management Console, the status is not dynamically reflected until the "Updates" page is reloaded. + - | + When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. + - | + When initializing a new GHES cluster, nodes with the `consul-server` role should be added to the cluster before adding more nodes. Adding all nodes simultaneously creates a race condition between nomad server registration and nomad client registration. + - | + Admins setting up cluster high availability (HA) may encounter a spokes error when running `ghe-cluster-repl-status` if a new organization and repositories are created before using the `ghe-cluster-repl-bootstrap` command. To avoid this issue, complete the cluster HA setup with `ghe-cluster-repl-bootstrap` before creating new organizations and repositories. + - | + In a cluster, the host running restore requires access to the storage nodes via their private IPs. + - | + On an instance hosted on Azure, commenting on an issue via email meant the comment was not added to the issue. + - | + After a restore, existing outside collaborators cannot be added to repositories in a new organization. This issue can be resolved by running `/usr/local/share/enterprise/ghe-es-search-repair` on the appliance. + - | + After a geo-replica is promoted to be a primary by running `ghe-repl-promote`, the actions workflow of a repository does not have any suggested workflows. + - | + Unexpected elements may appear in the UI on the repository overview page for locked repositories. diff --git a/data/release-notes/enterprise-server/3-17/7.yml b/data/release-notes/enterprise-server/3-17/7.yml new file mode 100644 index 000000000000..8d7054ccb247 --- /dev/null +++ b/data/release-notes/enterprise-server/3-17/7.yml @@ -0,0 +1,96 @@ +date: '2025-10-29' +sections: + security_fixes: + - | + **CRITICAL:** Redis has been upgraded to version 6.2.20 to address CVE-2025-49844 (also known as RediShell). Administrators should apply this update promptly to mitigate potential security risks. + - | + **HIGH:** A privilege escalation vulnerability in GitHub Enterprise Server allowed an authenticated enterprise admin to gain root SSH access. The exploit used a symlink escape in pre-receive hook environments. An attacker could craft a malicious repository and environment to replace system binaries during hook cleanup. This allowed them to execute a payload that added their SSH key to the root user's authorized keys, granting root SSH access. The attacker needed enterprise admin privileges to exploit this vulnerability. This has been assigned CVE-2025-11578 and was reported through the GitHub Bug Bounty program. + - | + **HIGH:** An attacker could execute arbitrary code in the context of other users' browsers by supplying a malicious `label:` value that was injected into the DOM without proper sanitization. This could be triggered when a user visits a crafted Issues search URL, enabling session hijacking, account takeover, and recovery code exfiltration. GitHub has requested CVE ID [CVE-2025-11892](https://www.cve.org/cverecord?id=CVE-2025-11892) for this vulnerability, which was reported via the [GitHub Bug Bounty program](https://bounty.github.com/). + - | + Authenticated users could target the internal aqueduct-lite endpoints by using a domain name to circumvent checks. This fix addresses this Server-Side Request Forgery (SSRF) vulnerability by blocking connections to loopback addresses after resolving the domain name for the webhook delivery address. + - | + Packages have been updated to the latest security versions. + bugs: + - | + Initializing a cluster configuration for the first time could fail with `Error: Validation preflight-check`. + - | + Administrators running the `ghe-repl-start-all` command may have encountered replicas remaining in an enabled state after a failed operation, causing subsequent configuration updates to execute on unintended nodes. Replicas now revert to a disabled state if the command fails. + - | + Setting up MySQL replication on secondary replica nodes was inefficient and consumed unnecessary root disk space. + - | + Users applying a new license file received an HTTP 500 error. + - | + After an upgrade, administrators found that Elasticsearch allocation remained set to "none," causing subsequent upgrades to fail. Enterprise upgrades now correctly set allocation to "all" after configuration is applied, preventing upgrade blocks. + - | + When running the `system-requirements` check as part of the `ghe-cluster-config-check` command prior to the initialization of a new cluster, the check request would fail because it exceeded the overall request timeout. + - | + SVG files stored in Git Large File Storage (LFS) failed to render on the web interface. + - | + Creating an organization would fail with a 500 or validation error if a maximum lifetime policy for {% data variables.product.pat_generic_plural %} was set to less than 366 days in the enterprise settings. + - | + Announcements scheduled using the `expires_at` timestamp in ISO 8601 format were not parsing the specified time correctly, resulting in the time component always being ignored. + - | + On the "Scheduled workflows" page in the site admin dashboard, actors attributed to workflows appeared as "Not found". + - | + On pull requests in organization-owned repositories, users could not request reviews from teams with the "All-repository read" organization role. + - | + Administrators experienced 500 errors when attempting to run Dependabot from the Security tab, to scan repositories for dependency vulnerabilities. + - | + On instances with thousands of organizations and roles, opening the security overview page for an organization or any other organization-level pages accessible via the Security tab triggered inefficient database queries that could degrade performance for other users. + - | + Administrators who had upgraded to the previous patch release may have observed a significant increase in executions of the `SecurityOverviewAnalytics::UpdateFeatureStatusSummaryJob`, causing background job queue saturation, service delays, reduced stability, and lower performance for environments using security overview analytics. + - | + On instances where GitHub Actions workflows require approval to run on pull requests from forked repositories, workflows remained queued indefinitely after users clicked "Approve and run". + - | + The GitHub system user was not always properly set on startup, occasionally surfacing in authentication errors or failed secret scanning jobs in logs. + - | + In rare cases, inconsistent data could lead to a panic in the code scanning service, causing it to restart and become unavailable for a few seconds. This could cause HTTP 500 errors when interacting with the code scanning API or in parts of the UI. + changes: + - | + Elasticsearch deprecation warnings, which are logged to index files in new versions of Elasticsearch, have been disabled. These warnings provided no value to administrators, and in some cases could block upgrades of instances in high-availability or cluster configurations. + - | + Logging of configuration runs is improved with streamlined logging for different configuration phases. Phase-specific logs are written to both the main log file (`ghe-config.log`) and the console for better visibility. + known_issues: + - | + Custom firewall rules are removed during the upgrade process. + - | + During the validation phase of a configuration run, a `No such object` error may occur for the Notebook and Viewscreen services. This error can be ignored as the services should still correctly start. + - | + If the root site administrator is locked out of the Management Console after failed login attempts, the account does not unlock automatically after the defined lockout time. Someone with administrative SSH access to the instance must unlock the account using the administrative shell. For more information, see [AUTOTITLE](/admin/configuration/administering-your-instance-from-the-management-console/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + On an instance with the HTTP `X-Forwarded-For` header configured for use behind a load balancer, all client IP addresses in the instance's audit log erroneously appear as 127.0.0.1. + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Admin stats REST API endpoints may timeout on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + When following the steps for [Replacing the primary MySQL node](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-the-primary-mysql-node), step 14 (running `ghe-cluster-config-apply`) might fail with errors. If this occurs, re-running `ghe-cluster-config-apply` is expected to succeed. + - | + Running a config apply as part of the steps for [Replacing a node in an emergency](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-a-node-in-an-emergency) may fail with errors if the node being replaced is still reachable. If this occurs, shut down the node and repeat the steps. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring data originally backed up from a 3.13 or greater appliance version, the Elasticsearch indices need to be reindexed before some of the data will show up. This happens via a nightly scheduled job. You can also trigger the reindexing by running `/usr/local/share/enterprise/ghe-es-search-repair`. + - | + An organization-level code scanning configuration page is displayed on instances that do not use GitHub Advanced Security or code scanning. + - | + When enabling automatic update checks for the first time in the Management Console, the status is not dynamically reflected until the "Updates" page is reloaded. + - | + When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. + - | + When initializing a new GHES cluster, nodes with the `consul-server` role should be added to the cluster before adding more nodes. Adding all nodes simultaneously creates a race condition between nomad server registration and nomad client registration. + - | + Admins setting up cluster high availability (HA) may encounter a spokes error when running `ghe-cluster-repl-status` if a new organization and repositories are created before using the `ghe-cluster-repl-bootstrap` command. To avoid this issue, complete the cluster HA setup with `ghe-cluster-repl-bootstrap` before creating new organizations and repositories. + - | + In a cluster, the host running restore requires access to the storage nodes via their private IPs. + - | + On an instance hosted on Azure, commenting on an issue via email meant the comment was not added to the issue. + - | + After a restore, existing outside collaborators cannot be added to repositories in a new organization. This issue can be resolved by running `/usr/local/share/enterprise/ghe-es-search-repair` on the appliance. + - | + After a geo-replica is promoted to be a primary by running `ghe-repl-promote`, the actions workflow of a repository does not have any suggested workflows. + - | + Unexpected elements may appear in the UI on the repository overview page for locked repositories. + - | + When publishing npm packages in a workflow after restoring from a backup to GitHub Enterprise Server 3.13.5.gm4 or 3.14.2.gm3, you may encounter a `401 Unauthorized` error from the GitHub Packages service. This can happen if the restore is from an N-1 or N-2 version and the workflow targets the npm endpoint on the backup instance. To avoid this issue, ensure the access token is valid and includes the correct scopes for publishing to GitHub Packages. diff --git a/data/release-notes/enterprise-server/3-18/1.yml b/data/release-notes/enterprise-server/3-18/1.yml new file mode 100644 index 000000000000..68da65bc77b3 --- /dev/null +++ b/data/release-notes/enterprise-server/3-18/1.yml @@ -0,0 +1,98 @@ +date: '2025-10-29' +sections: + security_fixes: + - | + **CRITICAL:** Redis has been upgraded to version 6.2.20 to address CVE-2025-49844 (also known as RediShell). Administrators should apply this update promptly to mitigate potential security risks. + - | + **HIGH:** A privilege escalation vulnerability in GitHub Enterprise Server allowed an authenticated enterprise admin to gain root SSH access. The exploit used a symlink escape in pre-receive hook environments. An attacker could craft a malicious repository and environment to replace system binaries during hook cleanup. This allowed them to execute a payload that added their SSH key to the root user's authorized keys, granting root SSH access. The attacker needed enterprise admin privileges to exploit this vulnerability. This has been assigned CVE-2025-11578 and was reported through the GitHub Bug Bounty program. + - | + **HIGH:** An attacker could execute arbitrary code in the context of other users' browsers by supplying a malicious `label:` value that was injected into the DOM without proper sanitization. This could be triggered when a user visits a crafted Issues search URL, enabling session hijacking, account takeover, and recovery code exfiltration. GitHub has requested CVE ID [CVE-2025-11892](https://www.cve.org/cverecord?id=CVE-2025-11892) for this vulnerability, which was reported via the [GitHub Bug Bounty program](https://bounty.github.com/). + - | + Authenticated users could target the internal aqueduct-lite endpoints by using a domain name to circumvent checks. This fix addresses this Server-Side Request Forgery (SSRF) vulnerability by blocking connections to loopback addresses after resolving the domain name for the webhook delivery address. + - | + **LOW:** When a user updated a classic {% data variables.product.pat_generic_title_case %} (PAT) to remove all scopes instead of revoking the PAT, the change was silently ignored and the PAT continued to grant its previously held permissions. To mitigate this issue, GitHub updated the token management logic to correctly clear scopes when no scope is provided. + - | + Packages have been updated to the latest security versions. + bugs: + - | + Initializing a cluster configuration for the first time could fail with `Error: Validation preflight-check`. + - | + Administrators running the `ghe-repl-start-all` command may have encountered replicas remaining in an enabled state after a failed operation, causing subsequent configuration updates to execute on unintended nodes. Replicas now revert to a disabled state if the command fails. + - | + Setting up MySQL replication on secondary replica nodes was inefficient and consumed unnecessary root disk space. + - | + Administrators and users who accessed dashboard panels experienced issues with the CPU panel, navigation between dashboards, and a missing home dashboard. + - | + Administrators could not generate support bundles on stateless high availability nodes because the `ghe-support-bundle` command failed when attempting to query Elasticsearch on nodes without the `elasticsearch-server` role. + - | + After an upgrade, administrators found that Elasticsearch allocation remained set to "none," causing subsequent upgrades to fail. Enterprise upgrades now correctly set allocation to "all" after configuration is applied, preventing upgrade blocks. + - | + When running the `system-requirements` check as part of the `ghe-cluster-config-check` command prior to the initialization of a new cluster, the check request would fail because it exceeded the overall request timeout. + - | + Creating an organization would fail with a 500 or validation error if a maximum lifetime policy for {% data variables.product.pat_generic_plural %} was set to less than 366 days in the enterprise settings. + - | + Announcements scheduled using the `expires_at` timestamp in ISO 8601 format were not parsing the specified time correctly, resulting in the time component always being ignored. + - | + On pull requests in organization-owned repositories, users could not request reviews from teams with the "All-repository read" organization role. + - | + Administrators experienced 500 errors when attempting to run Dependabot from the Security tab, to scan repositories for dependency vulnerabilities. + - | + On instances with thousands of organizations and roles, opening the security overview page for an organization or any other organization-level pages accessible via the Security tab triggered inefficient database queries that could degrade performance for other users. + - | + Administrators who had upgraded to the previous patch release may have observed a significant increase in executions of the `SecurityOverviewAnalytics::UpdateFeatureStatusSummaryJob`, causing background job queue saturation, service delays, reduced stability, and lower performance for environments using security overview analytics. + - | + On instances where GitHub Actions workflows require approval to run on pull requests from forked repositories, workflows remained queued indefinitely after users clicked "Approve and run". + - | + The GitHub system user was not always properly set on startup, occasionally surfacing in authentication errors or failed secret scanning jobs in logs. + changes: + - | + Elasticsearch deprecation warnings, which are logged to index files in new versions of Elasticsearch, have been disabled. These warnings provided no value to administrators, and in some cases could block upgrades of instances in high-availability or cluster configurations. + - | + Logging of configuration runs is improved with streamlined logging for different configuration phases. Phase-specific logs are written to both the main log file (`ghe-config.log`) and the console for better visibility. + - | + Users can no longer view Git objects, such as commits and tags, that exceed the maximum size limit of 10 MB. + known_issues: + - | + Custom firewall rules are removed during the upgrade process. + - | + During the validation phase of a configuration run, a `No such object` error may occur for the Notebook and Viewscreen services. This error can be ignored as the services should still correctly start. + - | + If the root site administrator is locked out of the Management Console after failed login attempts, the account does not unlock automatically after the defined lockout time. Someone with administrative SSH access to the instance must unlock the account using the administrative shell. For more information, see [AUTOTITLE](/admin/configuration/administering-your-instance-from-the-management-console/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + On an instance with the HTTP `X-Forwarded-For` header configured for use behind a load balancer, all client IP addresses in the instance's audit log erroneously appear as 127.0.0.1. + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Admin stats REST API endpoints may timeout on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + When following the steps for [Replacing the primary MySQL node](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-the-primary-mysql-node), step 14 (running `ghe-cluster-config-apply`) might fail with errors. If this occurs, re-running `ghe-cluster-config-apply` is expected to succeed. + - | + Running a config apply as part of the steps for [Replacing a node in an emergency](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-a-node-in-an-emergency) may fail with errors if the node being replaced is still reachable. If this occurs, shut down the node and repeat the steps. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring data originally backed up from a 3.13 or greater appliance version, the Elasticsearch indices need to be reindexed before some of the data will show up. This happens via a nightly scheduled job. You can also trigger the reindexing by running `/usr/local/share/enterprise/ghe-es-search-repair`. + - | + An organization-level code scanning configuration page is displayed on instances that do not use GitHub Advanced Security or code scanning. + - | + When enabling automatic update checks for the first time in the Management Console, the status is not dynamically reflected until the "Updates" page is reloaded. + - | + When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. + - | + When initializing a new GHES cluster, nodes with the `consul-server` role should be added to the cluster before adding more nodes. Adding all nodes simultaneously creates a race condition between nomad server registration and nomad client registration. + - | + Admins setting up cluster high availability (HA) may encounter a spokes error when running `ghe-cluster-repl-status` if a new organization and repositories are created before using the `ghe-cluster-repl-bootstrap` command. To avoid this issue, complete the cluster HA setup with `ghe-cluster-repl-bootstrap` before creating new organizations and repositories. + - | + In a cluster, the host running restore requires access to the storage nodes via their private IPs. + - | + On an instance hosted on Azure, commenting on an issue via email meant the comment was not added to the issue. + - | + After a restore, existing outside collaborators cannot be added to repositories in a new organization. This issue can be resolved by running `/usr/local/share/enterprise/ghe-es-search-repair` on the appliance. + - | + After a geo-replica is promoted to be a primary by running `ghe-repl-promote`, the actions workflow of a repository does not have any suggested workflows. + - | + Unexpected elements may appear in the UI on the repository overview page for locked repositories. + - | + When publishing npm packages in a workflow after restoring from a backup to GitHub Enterprise Server 3.13.5.gm4 or 3.14.2.gm3, you may encounter a `401 Unauthorized` error from the GitHub Packages service. This can happen if the restore is from an N-1 or N-2 version and the workflow targets the npm endpoint on the backup instance. To avoid this issue, ensure the access token is valid and includes the correct scopes for publishing to GitHub Packages. + - | + The setting to define private registries at the organization level for code scanning is only available if Dependabot is also enabled for the instance. diff --git a/data/reusables/copilot/copilot-extensions/extending-copilot-chat.md b/data/reusables/copilot/copilot-extensions/extending-copilot-chat.md index fac972bda056..c2c4e34f61cf 100644 --- a/data/reusables/copilot/copilot-extensions/extending-copilot-chat.md +++ b/data/reusables/copilot/copilot-extensions/extending-copilot-chat.md @@ -1,4 +1,2 @@ {% data variables.copilot.copilot_extensions %} integrate the power of external tools into {% data variables.copilot.copilot_chat_short %}, helping you reduce context switching and receive responses with domain-specific context. You can install {% data variables.copilot.copilot_extensions_short %} from the {% data variables.product.prodname_marketplace %} or build private ones within your organization, then type `@` in a chat window to see a list of your available extensions. To use an extension, select the extension from the list or type the full slug name, then type your prompt. - -To learn more, see [AUTOTITLE](/copilot/using-github-copilot/using-extensions-to-integrate-external-tools-with-copilot-chat). diff --git a/data/reusables/copilot/differences-cfi-cfb-table.md b/data/reusables/copilot/differences-cfi-cfb-table.md index 82e78b94627c..17c0ac669a3c 100644 --- a/data/reusables/copilot/differences-cfi-cfb-table.md +++ b/data/reusables/copilot/differences-cfi-cfb-table.md @@ -17,7 +17,7 @@ | {% data variables.copilot.copilot_coding_agent %} ({% data variables.release-phases.public_preview %}) | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | | Agent mode | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | | {% data variables.product.prodname_copilot_short %} code review | Only "Review selection" in {% data variables.product.prodname_vscode_shortname %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | -| {% data variables.copilot.copilot_extensions_short %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| Model Context Protocol (MCP) | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% endrowheaders %} @@ -62,7 +62,7 @@ | Repository and personal custom instructions | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | | Organization custom instructions ({% data variables.release-phases.public_preview %}) | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | | Prompt files | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | -| Private extensions | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | +| Model Context Protocol (MCP) | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | | Block suggestions matching public code | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | | Exclude specified files from {% data variables.product.prodname_copilot_short %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | | Organization-wide policy management | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "x" aria-label="Not included" %} | {% octicon "check" aria-label="Included" %} | {% octicon "check" aria-label="Included" %} | diff --git a/data/reusables/copilot/mcp/mcp-chat-in-ide.md b/data/reusables/copilot/mcp/mcp-chat-in-ide.md new file mode 100644 index 000000000000..a14b1fe1722e --- /dev/null +++ b/data/reusables/copilot/mcp/mcp-chat-in-ide.md @@ -0,0 +1 @@ +You can use MCP to extend the capabilities of {% data variables.copilot.copilot_chat_short %} by integrating it with a wide range of existing tools and services. For additional information, see [AUTOTITLE](/copilot/concepts/context/mcp). diff --git a/data/tables/copilot/model-multipliers.yml b/data/tables/copilot/model-multipliers.yml index 7e32496eb95f..7161878a5686 100644 --- a/data/tables/copilot/model-multipliers.yml +++ b/data/tables/copilot/model-multipliers.yml @@ -54,5 +54,5 @@ multiplier_free: Not applicable - name: Raptor mini - multiplier_paid: Not applicable + multiplier_paid: 0 multiplier_free: 1 diff --git a/data/tables/copilot/model-supported-plans.yml b/data/tables/copilot/model-supported-plans.yml index f78d44180004..abe06048f922 100644 --- a/data/tables/copilot/model-supported-plans.yml +++ b/data/tables/copilot/model-supported-plans.yml @@ -84,7 +84,7 @@ - name: Raptor mini free: true - pro: false - pro_plus: false + pro: true + pro_plus: true business: false enterprise: false