From 9a0e1568763f82a89a60aa2f9a9eb359d85482e7 Mon Sep 17 00:00:00 2001 From: MikaelaMcGrath Date: Wed, 20 Nov 2024 01:47:06 +1000 Subject: [PATCH 1/7] Corrected webhook delivery example (#53168) --- content/webhooks/webhook-events-and-payloads.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/webhooks/webhook-events-and-payloads.md b/content/webhooks/webhook-events-and-payloads.md index 8cb42dd9d6ff..f55b9e286f60 100644 --- a/content/webhooks/webhook-events-and-payloads.md +++ b/content/webhooks/webhook-events-and-payloads.md @@ -53,7 +53,7 @@ To see what each header might look like in a webhook payload, see "[Example webh You can choose to have payloads delivered in JSON format (`application/json`) or as URL-encoded data (`x-www-form-urlencoded`). Following is an example of a webhook POST request that uses the JSON format. ```shell -> POST /payload HTTP/2 +> POST /payload HTTP/1.1 > X-GitHub-Delivery: 72d3162e-cc78-11e3-81ab-4c9367dc0958{% ifversion ghes %} > X-GitHub-Enterprise-Version: 2.15.0 From 3187c90820f433e976cbac0654f11646a5e80e32 Mon Sep 17 00:00:00 2001 From: Felicity Chapman Date: Tue, 19 Nov 2024 15:59:40 +0000 Subject: [PATCH 2/7] Help billing managers automate their reporting using the REST API (#53034) Co-authored-by: Kevin Heis Co-authored-by: Greg Mondello <72952982+gmondello@users.noreply.github.com> --- .../automating-usage-reporting.md | 125 ++++++++++++++++++ .../using-the-new-billing-platform/index.md | 1 + 2 files changed, 126 insertions(+) create mode 100644 content/billing/using-the-new-billing-platform/automating-usage-reporting.md diff --git a/content/billing/using-the-new-billing-platform/automating-usage-reporting.md b/content/billing/using-the-new-billing-platform/automating-usage-reporting.md new file mode 100644 index 000000000000..55a0feaae840 --- /dev/null +++ b/content/billing/using-the-new-billing-platform/automating-usage-reporting.md @@ -0,0 +1,125 @@ +--- +title: Automating usage reporting with the REST API +intro: Learn how to automate reporting on your use of paid features using the REST API. +allowTitleToDifferFromFilename: true +shortTitle: Automate usage reporting +versions: + ghec: '*' +type: how_to +topics: + - Enterprise + - Billing + - REST +permissions: 'Enterprise owners and billing managers' +product: '{% data reusables.billing.enhanced-billing-platform-product %}' +--- + +You can automatically pull data from {% data variables.product.github %} to populate the business systems you use to monitor costs and usage using the REST API. If you haven't used the {% data variables.product.github %} REST API before, the following articles are a good starting point, see "[AUTOTITLE](/rest/using-the-rest-api). + +## Using the billing platform `/usage` endpoint to retrieve metered usage details for an enterprise + +The enhanced billing platform provides a single REST API `/usage` endpoint that you can use to report on the use of all metered products. The usage data provided by this endpoint is available only to enterprise owners and enterprise billing managers, so you will need to authenticate with {% data variables.product.github %}. + +* If you use the GitHub CLI, use the `gh auth login` command to authenticate. +* Otherwise, you will need to create a {% data variables.product.pat_v1 %}, see "[Creating a {% data variables.product.pat_v1 %}](/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic)." + +When you call the `/usage` endpoint, you must specify the enterprise that you want data for and, by default, usage for the current year that does not belong to a cost center is reported. You can reduce the scope of data returned by the endpoint using query parameters. + +* Define a specific time period by setting one or more of the following parameters: `year`, `month`, `day`, and `hour`. +* Define a cost center to report on by identifier using the `cost_center_id` query parameter. + +For more detailed information and an example call and response, see [Get billing usage report for an enterprise](/rest/enterprise-admin/billing?apiVersion=2022-11-28#get-billing-usage-report-for-an-enterprise). + + +## Migrating from the endpoints used for the previous billing platform + +The previous billing platform provided three different endpoints for usage data: + +* [Get GitHub Actions billing for an enterprise](/rest/enterprise-admin/billing?apiVersion=2022-11-28#get-github-actions-billing-for-an-enterprise) +* [Get GitHub Packages billing for an enterprise](/rest/enterprise-admin/billing?apiVersion=2022-11-28#get-github-packages-billing-for-an-enterprise) +* [Get shared storage billing for an enterprise](/rest/enterprise-admin/billing?apiVersion=2022-11-28#get-shared-storage-billing-for-an-enterprise) + +When you transition to the enhanced billing platform, these endpoints will no longer return accurate usage information. You should upgrade any automation that uses these endpoints to use the new endpoint [GET /enterprises/{enterprise}/settings/billing/usage](/rest/enterprise-admin/billing?apiVersion=2022-11-28#get-billing-usage-report-for-an-enterprise). The tables below provide a detailed explanation how to use the billing platform to retrieve equivalent information. + +### Changes in call definition + +If you used a {% data variables.product.pat_v2 %} to authenticate with the previous endpoints, you will need create a {% data variables.product.pat_v1 %} to authenticate with the new endpoint. + +In addition, you may want to use the new query parameters to specify a time period or cost center. + +### Getting GitHub Actions billing data from the new response data + +Example of the previous response + +```json +{"total_minutes_used": 305, "total_paid_minutes_used": 0, "included_minutes": 3000, "minutes_used_breakdown": { "UBUNTU": 205, "MACOS": 10, "WINDOWS": 90 } } +``` + +Example of the new response + +```json +{ "usageItems": [ { "date": "2023-08-01", "product": "Actions", "sku": "Actions Linux", "quantity": 100, "unitType": "minutes", "pricePerUnit": 0.008, "grossAmount": 0.8, "discountAmount": 0, "netAmount": 0.8, "organizationName": "GitHub", "repositoryName": "github/example"} ] } +``` + +To get the same values from the new response data: + +{% rowheaders %} + +| Previous property | Calculate from new API response | +|------ |----------- | +| `total_minutes_used` |
  • Filter results by `"product": "Actions"` and `"unitType": "minutes"`
  • Sum `quantity`
| +| `total_paid_minutes_used`| This is now represented as a $ amount via `netAmount`.
  • Filter results by `"product": "Actions"` and `"unitType": "minutes"`
  • Sum `netAmount`
| +| `included_minutes` | This is now represented as a $ amount via `discountAmount`.
  • Filter results by `"product": "Actions"` and `"unitType": "minutes"`
  • Sum `discountAmount`
| +| `minutes_used_breakdown` |
  • Filter results by `"product": "Actions"` and `"unitType": "minutes"`
  • Sum `quantity` grouped by `sku`
| + +{% endrowheaders %} + +### Getting GitHub Packages billing data from the new response data + +Example of the previous response + +```json +{ "total_gigabytes_bandwidth_used": 50, "total_paid_gigabytes_bandwidth_used": 40, "included_gigabytes_bandwidth": 10 } +``` + +Example of the new response + +```json +{ "usageItems": [ { "date": "2023-08-01", "product": "Packages", "sku": "Packages data transfer", "quantity": 100, "unitType": "gigabytes", "pricePerUnit": 0.008, "grossAmount": 0.8, "discountAmount": 0, "netAmount": 0.8, "organizationName": "GitHub", "repositoryName": "github/example" } ] } +``` + +{% rowheaders %} + +| Previous property | Calculate from new API response | +|------ |----------- | +| `total_gigabytes_bandwidth_used` |
  • Filter results by `"product": "Packages"` and `"unitType": "gigabytes"`
  • Sum `quantity`
| +| `total_paid_gigabytes_bandwidth_used`| This is now represented as a $ amount via `netAmount`.
  • Filter results by `"product": "Packages"` and `"unitType": "gigabytes"`
  • Sum `netAmount`
| +| `included_gigabytes_bandwidth` | This is now represented as a $ amount via `discountAmount`.
  • Filter results by `"product": "Packages"` and `"unitType": "gigabytes"`
  • Sum `discountAmount`
| + +{% endrowheaders %} + +### Getting shared storage billing from the new response data + +Example of the previous response + +```json +{ "days_left_in_billing_cycle": 20, "estimated_paid_storage_for_month": 15, "estimated_storage_for_month": 40 } +``` + +Example of the new response + +```json +{ "usageItems": [ { "date": "2023-08-01", "product": "Packages", "sku": "Packages storage", "quantity": 100, "unitType": "GigabyteHours", "pricePerUnit": 0.008, "grossAmount": 0.8, "discountAmount": 0, "netAmount": 0.8, "organizationName": "GitHub", "repositoryName": "github/example" } ] } +``` + +{% rowheaders %} + +| Previous property | Calculate from new API response | +|------ |----------- | +| `days_left_in_billing_cycle` | Not available. This information can be inferred by subtracting the current day of the month from the number of days in the current month. | +| `estimated_paid_storage_for_month`| This is now represented as a $ amount via `netAmount`.

Prerequisite: pass the `month` and `year` query parameters.

For Actions storage
  • Filter results by `"product": "Actions"` and `"unitType": "GigabyteHours"`
  • Sum `netAmount`
For Packages storage
  • Filter results by `"product": "Packages"` and `"unitType": "GigabyteHours"`
  • Sum `netAmount`
| +| `estimated_storage_for_month` | Prerequisite: pass the `month` and `year` query parameters.

For Actions storage
  • Filter results by `"product": "Actions"` and `"unitType": "GigabyteHours"`
  • Sum `quantity`
For Packages storage
  • Filter results by `"product": "Packages"` and `"unitType": "GigabyteHours"`
  • Sum `quantity`
| + +{% endrowheaders %} + + diff --git a/content/billing/using-the-new-billing-platform/index.md b/content/billing/using-the-new-billing-platform/index.md index 938b24925876..9e73bd9a7b1d 100644 --- a/content/billing/using-the-new-billing-platform/index.md +++ b/content/billing/using-the-new-billing-platform/index.md @@ -20,5 +20,6 @@ children: - /charging-business-units - /preventing-overspending - /managing-your-payment-and-billing-information + - /automating-usage-reporting - /about-billing-for-git-large-file-storage --- From 9ac270d5337bf16750ca673a2d7d66549bc006bb Mon Sep 17 00:00:00 2001 From: Daniel Dunn Date: Tue, 19 Nov 2024 10:10:17 -0600 Subject: [PATCH 3/7] Update payload signing snippets to use the current key values (#53164) --- .../secret-scanning-partner-program.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/code-security/secret-scanning/secret-scanning-partnership-program/secret-scanning-partner-program.md b/content/code-security/secret-scanning/secret-scanning-partnership-program/secret-scanning-partner-program.md index 006ac2a26699..dab2de9795b8 100644 --- a/content/code-security/secret-scanning/secret-scanning-partnership-program/secret-scanning-partner-program.md +++ b/content/code-security/secret-scanning/secret-scanning-partnership-program/secret-scanning-partner-program.md @@ -164,11 +164,11 @@ import ( ) func main() { - payload := `[{"token":"some_token","type":"some_type","url":"some_url","source":"some_source"}]` + payload := `[{"source":"commit","token":"some_token","type":"some_type","url":"https://example.com/base-repo-url/"}]` - kID := "f9525bf080f75b3506ca1ead061add62b8633a346606dc5fe544e29231c6ee0d" + kID := "bcb53661c06b4728e59d897fb6165d5c9cda0fd9cdf9d09ead458168deb7518c" - kSig := "MEUCIFLZzeK++IhS+y276SRk2Pe5LfDrfvTXu6iwKKcFGCrvAiEAhHN2kDOhy2I6eGkOFmxNkOJ+L2y8oQ9A2T9GGJo6WJY=" + kSig := "MEQCIQDaMKqrGnE27S0kgMrEK0eYBmyG0LeZismAEz/BgZyt7AIfXt9fErtRS4XaeSt/AO1RtBY66YcAdjxji410VQV4xg==" // Fetch the list of GitHub Public Keys req, err := http.NewRequest("GET", "https://api.github.com/meta/public_keys/secret_scanning", nil) @@ -284,14 +284,14 @@ require 'json' require 'base64' payload = <<-EOL -[{"token":"some_token","type":"some_type","url":"some_url","source":"some_source"}] +[{"source":"commit","token":"some_token","type":"some_type","url":"https://example.com/base-repo-url/"}] EOL payload = payload -signature = "MEUCIFLZzeK++IhS+y276SRk2Pe5LfDrfvTXu6iwKKcFGCrvAiEAhHN2kDOhy2I6eGkOFmxNkOJ+L2y8oQ9A2T9GGJo6WJY=" +signature = "MEQCIQDaMKqrGnE27S0kgMrEK0eYBmyG0LeZismAEz/BgZyt7AIfXt9fErtRS4XaeSt/AO1RtBY66YcAdjxji410VQV4xg==" -key_id = "f9525bf080f75b3506ca1ead061add62b8633a346606dc5fe544e29231c6ee0d" +key_id = "bcb53661c06b4728e59d897fb6165d5c9cda0fd9cdf9d09ead458168deb7518c" url = URI.parse('https://api.github.com/meta/public_keys/secret_scanning') From df949379e356e10301d8ba01288831a04e0cad5a Mon Sep 17 00:00:00 2001 From: docs-bot <77750099+docs-bot@users.noreply.github.com> Date: Tue, 19 Nov 2024 08:35:54 -0800 Subject: [PATCH 4/7] Update audit log event data (#53183) --- src/audit-logs/lib/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/audit-logs/lib/config.json b/src/audit-logs/lib/config.json index 7240a8ed3cf0..a3cde864507e 100644 --- a/src/audit-logs/lib/config.json +++ b/src/audit-logs/lib/config.json @@ -3,5 +3,5 @@ "apiOnlyEvents": "This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.", "apiRequestEvent": "This event is only available via audit log streaming." }, - "sha": "bdaa03ca82e58489a9009c05ff02feb6dee01eb9" + "sha": "331ad672f7b1e388933dc4491e0f4a539fd58496" } \ No newline at end of file From 3c2fc762733c9bfa79dea3e2073ed4e92d3ba322 Mon Sep 17 00:00:00 2001 From: Kevin Heis Date: Tue, 19 Nov 2024 09:01:34 -0800 Subject: [PATCH 5/7] Ts links 4 - more adjustments to link scripts in workflows (#53184) --- .github/workflows/dont-delete-assets.yml | 3 ++- .github/workflows/validate-asset-images.yml | 3 ++- package.json | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dont-delete-assets.yml b/.github/workflows/dont-delete-assets.yml index 104cc7c37c77..7e543bb82147 100644 --- a/.github/workflows/dont-delete-assets.yml +++ b/.github/workflows/dont-delete-assets.yml @@ -17,6 +17,7 @@ on: - main paths: - 'assets/**' + - '.github/workflows/dont-delete-assets.yml' permissions: contents: read @@ -37,7 +38,7 @@ jobs: id: comment env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: src/assets/scripts/deleted-assets-pr-comment.js + run: npm run deleted-assets-pr-comment - name: Find possible previous comment if: ${{ steps.comment.outputs.markdown != '' }} diff --git a/.github/workflows/validate-asset-images.yml b/.github/workflows/validate-asset-images.yml index b1aedec16db7..22dd39e7a868 100644 --- a/.github/workflows/validate-asset-images.yml +++ b/.github/workflows/validate-asset-images.yml @@ -9,6 +9,7 @@ on: pull_request: paths: - 'assets/**' + - '.github/workflows/validate-asset-images.yml' permissions: contents: read @@ -24,4 +25,4 @@ jobs: - uses: ./.github/actions/node-npm-setup - name: Validate all asset images - run: tsx src/assets/scripts/validate-asset-images.ts + run: npm run validate-asset-images diff --git a/package.json b/package.json index 9999507eb392..3c2a5bde5a82 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "create-acr-token": "tsx src/workflows/acr-create-token.js", "debug": "cross-env NODE_ENV=development ENABLED_LANGUAGES=en nodemon --inspect src/frame/server.ts", "delete-orphan-translation-files": "tsx src/workflows/delete-orphan-translation-files.ts", + "deleted-assets-pr-comment": "tsx src/assets/scripts/deleted-assets-pr-comment.ts", "deleted-features-pr-comment": "tsx src/data-directory/scripts/deleted-features-pr-comment.ts", "dev": "cross-env npm start", "find-orphaned-assets": "tsx src/assets/scripts/find-orphaned-assets.ts", From 0e2ccc30ad54f74d1c04fe9587d9985e09077a74 Mon Sep 17 00:00:00 2001 From: Kevin Heis Date: Tue, 19 Nov 2024 09:21:58 -0800 Subject: [PATCH 6/7] Ts links 5 - Audited workflows that don't run themselves on pull request (#53185) --- .github/workflows/codeowners-content-systems.yml | 1 + .github/workflows/codeowners-docs-engineering.yml | 1 + .github/workflows/codeowners-legal.yml | 1 + .github/workflows/comment-release-note-info.yml | 1 + .github/workflows/dont-delete-features.yml | 1 + .github/workflows/hubber-contribution-help.yml | 1 + .github/workflows/orphaned-files-check.yml | 3 ++- .github/workflows/site-policy-sync.yml | 1 + .github/workflows/test-changed-content.yml | 1 + 9 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/codeowners-content-systems.yml b/.github/workflows/codeowners-content-systems.yml index 9f1a630d914a..46d28af765fb 100644 --- a/.github/workflows/codeowners-content-systems.yml +++ b/.github/workflows/codeowners-content-systems.yml @@ -9,6 +9,7 @@ on: paths: - 'contributing/content-*.md' - 'content/contributing/**.md' + - .github/workflows/codeowners-content-systems.yml jobs: codeowners-content-systems: diff --git a/.github/workflows/codeowners-docs-engineering.yml b/.github/workflows/codeowners-docs-engineering.yml index dfa8ba11db7c..0eba56112a24 100644 --- a/.github/workflows/codeowners-docs-engineering.yml +++ b/.github/workflows/codeowners-docs-engineering.yml @@ -25,6 +25,7 @@ on: - '.github/**' - '**Dockerfile' - 'package*.json' + - .github/workflows/codeowners-docs-engineering.yml jobs: codeowners-docs-engineering: diff --git a/.github/workflows/codeowners-legal.yml b/.github/workflows/codeowners-legal.yml index 7190176c8154..ca9edb14b8b0 100644 --- a/.github/workflows/codeowners-legal.yml +++ b/.github/workflows/codeowners-legal.yml @@ -15,6 +15,7 @@ on: - synchronize paths: - 'content/**' + - .github/workflows/codeowners-legal.yml permissions: contents: read diff --git a/.github/workflows/comment-release-note-info.yml b/.github/workflows/comment-release-note-info.yml index b04126625a65..d1b6e4059a14 100644 --- a/.github/workflows/comment-release-note-info.yml +++ b/.github/workflows/comment-release-note-info.yml @@ -8,6 +8,7 @@ on: - opened paths: - data/release-notes/enterprise-server/** + - .github/workflows/comment-release-note-info.yml permissions: contents: read diff --git a/.github/workflows/dont-delete-features.yml b/.github/workflows/dont-delete-features.yml index cddb604e7ea4..565598a60887 100644 --- a/.github/workflows/dont-delete-features.yml +++ b/.github/workflows/dont-delete-features.yml @@ -17,6 +17,7 @@ on: - main paths: - 'data/features/**' + - .github/workflows/dont-delete-features.yml permissions: contents: read diff --git a/.github/workflows/hubber-contribution-help.yml b/.github/workflows/hubber-contribution-help.yml index 283820d73355..ed876e629532 100644 --- a/.github/workflows/hubber-contribution-help.yml +++ b/.github/workflows/hubber-contribution-help.yml @@ -9,6 +9,7 @@ on: types: - opened paths: + - .github/workflows/hubber-contribution-help.yml - 'content/**' - 'data/**' diff --git a/.github/workflows/orphaned-files-check.yml b/.github/workflows/orphaned-files-check.yml index c914a5d39cb0..7934bb17d8e3 100644 --- a/.github/workflows/orphaned-files-check.yml +++ b/.github/workflows/orphaned-files-check.yml @@ -11,6 +11,7 @@ on: pull_request: paths: - .github/workflows/orphaned-assets-check.yml + - .github/workflows/orphaned-files-check.yml # In case any of the dependencies affect the script - 'package*.json' - src/assets/scripts/find-orphaned-assets.js @@ -96,7 +97,7 @@ jobs: The first responder should just spot-check some of the unused assets to make sure they aren't referenced anywhere and then approve and merge the pull request. - For more information, see [Doc: Orphaned Assets](https://github.com/github/docs-engineering/blob/main/docs/orphaned-assets.md) + For more information, see [Doc: Orphaned Assets](https://github.com/github/docs-engineering/blob/main/docs/orphaned-assets.md) and [Doc: Reusables CLI](https://github.com/github/docs-internal/tree/main/src/content-render/scripts/reusables-cli). EOM ) diff --git a/.github/workflows/site-policy-sync.yml b/.github/workflows/site-policy-sync.yml index 4c827a098ff5..e1ed69e53cc5 100644 --- a/.github/workflows/site-policy-sync.yml +++ b/.github/workflows/site-policy-sync.yml @@ -14,6 +14,7 @@ on: - closed paths: - 'content/site-policy/**' + - '.github/workflows/site-policy-sync.yml' workflow_dispatch: permissions: diff --git a/.github/workflows/test-changed-content.yml b/.github/workflows/test-changed-content.yml index dab8e7971f1c..a9b3b590f980 100644 --- a/.github/workflows/test-changed-content.yml +++ b/.github/workflows/test-changed-content.yml @@ -14,6 +14,7 @@ on: - main paths: - 'content/**' + - .github/workflows/test-changed-content.yml permissions: contents: read From 0ff4b8c56c884c24c5782df22989019780d1de7d Mon Sep 17 00:00:00 2001 From: Sunbrye Ly <56200261+sunbrye@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:39:35 -0800 Subject: [PATCH 7/7] Copilot Extensions - 3P Skillsets (public preview) (#53141) Co-authored-by: Dimitrios Philliou Co-authored-by: hubwriter --- .../about-github-marketplace-for-apps.md | 2 +- .../about-building-copilot-extensions.md | 8 +- .../about-copilot-agents.md | 2 +- ...opilot-agent-to-communicate-with-github.md | 2 +- ...o-communicate-with-the-copilot-platform.md | 2 +- .../using-copilots-llm-for-your-agent.md | 2 +- .../about-copilot-skillsets.md | 56 ++++++++++++ .../building-copilot-skillsets.md | 82 +++++++++++++++++ .../index.md | 13 +++ .../copilot-extensions-glossary.md | 8 +- ...-your-github-app-for-your-copilot-agent.md | 50 ----------- ...r-github-app-for-your-copilot-extension.md | 88 +++++++++++++++++++ ...-server-to-host-your-copilot-extension.md} | 21 ++--- ...a-github-app-for-your-copilot-extension.md | 2 +- .../creating-a-copilot-extension/index.md | 5 +- ...debugging-your-github-copilot-extension.md | 2 +- .../building-copilot-extensions/index.md | 3 +- ...-availability-of-your-copilot-extension.md | 2 +- ...github-copilot-extensions-using-agents.md} | 9 +- .../setting-up-copilot-extensions.md | 49 ++++++++++- ...-of-github-copilot-in-your-organization.md | 2 +- ...github-copilot-in-your-personal-account.md | 2 +- ...features-for-copilot-in-your-enterprise.md | 2 +- ...licies-for-copilot-in-your-organization.md | 2 +- ...ng-github-copilot-questions-in-your-ide.md | 2 +- ...egrate-external-tools-with-copilot-chat.md | 2 +- ...ferences-between-agents-and-skillsets-1.md | 2 + ...ferences-between-agents-and-skillsets-2.md | 1 + .../extending-copilot-chat.md | 2 +- .../{beta-note.md => public-preview-note.md} | 0 .../skillsets-configuration-steps.md | 8 ++ data/variables/product.yml | 6 ++ src/tools/lib/all-tools.js | 2 + 33 files changed, 355 insertions(+), 86 deletions(-) create mode 100644 content/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/about-copilot-skillsets.md create mode 100644 content/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/building-copilot-skillsets.md create mode 100644 content/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/index.md delete mode 100644 content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent.md create mode 100644 content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-extension.md rename content/copilot/building-copilot-extensions/creating-a-copilot-extension/{configuring-your-server-to-host-your-copilot-agent.md => configuring-your-server-to-host-your-copilot-extension.md} (58%) rename content/copilot/building-copilot-extensions/{quickstart-for-github-copilot-extensions.md => quickstart-for-github-copilot-extensions-using-agents.md} (93%) create mode 100644 data/reusables/copilot/copilot-extensions/differences-between-agents-and-skillsets-1.md create mode 100644 data/reusables/copilot/copilot-extensions/differences-between-agents-and-skillsets-2.md rename data/reusables/copilot/copilot-extensions/{beta-note.md => public-preview-note.md} (100%) create mode 100644 data/reusables/copilot/copilot-extensions/skillsets-configuration-steps.md 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 ed8461fef76b..29ed40d3df80 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 @@ -46,7 +46,7 @@ If you're interested in creating an app for {% data variables.product.prodname_m ### {% data variables.product.prodname_copilot_extensions %} -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} {% data reusables.copilot.copilot-extensions.copilot-extensions-intro %} diff --git a/content/copilot/building-copilot-extensions/about-building-copilot-extensions.md b/content/copilot/building-copilot-extensions/about-building-copilot-extensions.md index df2e8bac43eb..cbc46622b2ad 100644 --- a/content/copilot/building-copilot-extensions/about-building-copilot-extensions.md +++ b/content/copilot/building-copilot-extensions/about-building-copilot-extensions.md @@ -9,7 +9,7 @@ shortTitle: About building Extensions type: overview --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} ## About {% data variables.product.prodname_copilot_extensions_short %} @@ -45,6 +45,12 @@ type: overview * 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 +### 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 %} + ### Resources for building {% data variables.product.prodname_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 %}. diff --git a/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/about-copilot-agents.md b/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/about-copilot-agents.md index 07d0125d1ec8..134f12afcafa 100644 --- a/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/about-copilot-agents.md +++ b/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/about-copilot-agents.md @@ -9,7 +9,7 @@ shortTitle: About Copilot agents type: overview --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} {% data variables.product.prodname_copilot_agents_short %} are custom tools embedded in {% data variables.product.prodname_copilot_extensions_short %}. They integrate with {% data variables.product.prodname_copilot_chat_short %} to provide additional functionalities tailored to specific needs. {% data variables.product.prodname_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.product.prodname_copilot_chat_short %} interface. diff --git a/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-github.md b/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-github.md index 3a74cb9328ac..dac7a4441aa2 100644 --- a/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-github.md +++ b/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-github.md @@ -9,7 +9,7 @@ shortTitle: Communicate with GitHub type: reference --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} ## Prerequisites diff --git a/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-the-copilot-platform.md b/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-the-copilot-platform.md index eb00e274b4f1..9c62e65a95b9 100644 --- a/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-the-copilot-platform.md +++ b/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/configuring-your-copilot-agent-to-communicate-with-the-copilot-platform.md @@ -10,7 +10,7 @@ type: reference layout: inline --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} {% data variables.product.prodname_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. diff --git a/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-copilots-llm-for-your-agent.md b/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-copilots-llm-for-your-agent.md index a108d0c4e019..2c0851940621 100644 --- a/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-copilots-llm-for-your-agent.md +++ b/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-copilots-llm-for-your-agent.md @@ -10,7 +10,7 @@ type: reference allowTitleToDifferFromFilename: true --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} ## About {% data variables.product.prodname_copilot_short %}'s Language Learning Model (LLM) diff --git a/content/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/about-copilot-skillsets.md b/content/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/about-copilot-skillsets.md new file mode 100644 index 000000000000..2f5f19e154fe --- /dev/null +++ b/content/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/about-copilot-skillsets.md @@ -0,0 +1,56 @@ +--- +title: About Copilot skillsets +intro: 'Learn what {% data variables.product.prodname_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 +shortTitle: About {% data variables.product.prodname_copilot_skillsets_short %} +type: overview +--- + +{% data reusables.copilot.copilot-extensions.public-preview-note %} + +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.product.prodname_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.product.prodname_copilot_extensibility_platform %}, which manages the flow of user requests and function evaluations. With {% data variables.product.prodname_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.product.prodname_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.product.prodname_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/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/building-copilot-skillsets.md b/content/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/building-copilot-skillsets.md new file mode 100644 index 000000000000..80b9a72b2bac --- /dev/null +++ b/content/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/building-copilot-skillsets.md @@ -0,0 +1,82 @@ +--- +title: Building Copilot skillsets +intro: 'Learn the steps to build {% data variables.product.prodname_copilot_skillsets %} and integrate custom tools and functions into your Copilot environment.' +versions: + feature: copilot-extensions +topics: + - Copilot +shortTitle: Build {% data variables.product.prodname_copilot_skillsets_short %} +type: how_to +--- + +{% data reusables.copilot.copilot-extensions.public-preview-note %} + +## Introduction + +{% data variables.product.prodname_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 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/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/index.md b/content/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/index.md new file mode 100644 index 000000000000..96fd3ea6a0c8 --- /dev/null +++ b/content/copilot/building-copilot-extensions/building-a-copilot-skillset-for-your-copilot-extension/index.md @@ -0,0 +1,13 @@ +--- +title: Building a Copilot skillset for your Copilot Extension +shortTitle: Build a Copilot skillset +intro: 'Learn how to build a custom {% data variables.product.prodname_copilot_skillset_short %} to combine custom skills and extend the capabilities of {% data variables.product.prodname_copilot_short %}.' +versions: + feature: copilot +topics: + - Copilot +children: + - /about-copilot-skillsets + - /building-copilot-skillsets +--- + diff --git a/content/copilot/building-copilot-extensions/copilot-extensions-glossary.md b/content/copilot/building-copilot-extensions/copilot-extensions-glossary.md index 684f61648734..5aaca4dcd7ad 100644 --- a/content/copilot/building-copilot-extensions/copilot-extensions-glossary.md +++ b/content/copilot/building-copilot-extensions/copilot-extensions-glossary.md @@ -9,7 +9,7 @@ shortTitle: Extensions Glossary type: reference --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} The following terms are used in the context of {% data variables.product.prodname_copilot_extensions_short %}, and are defined here for clarity. @@ -55,7 +55,11 @@ An extension that is visible and installable by any {% data variables.product.co #### Skill -A piece of code that retrieves context or executes an action in response to a user’s prompt (e.g., "findIssueByID(id: number)"). +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 collection of skills in the form of an implementation in {% data variables.product.prodname_copilot_extensions %} that allows developers to connect external services or custom API endpoints to Copilot with minimal complexity. The {% data variables.product.prodname_copilot_extensibility_platform_short %} handles prompt crafting, function evaluation, and response generation. The developer handles only the API call. #### Tool/Function Calling diff --git a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent.md b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent.md deleted file mode 100644 index 064465349e3e..000000000000 --- a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Configuring your GitHub App for your Copilot agent -intro: 'Learn how to configure your {% data variables.product.prodname_github_app %} so that it is associated with your {% data variables.product.prodname_copilot_agent_short %}.' -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Configure App for agent -type: how_to ---- - -{% data reusables.copilot.copilot-extensions.beta-note %} - -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 %} agent. - -## Prerequisites - -* You have configured your server to deploy your {% data variables.product.prodname_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). -* You have created a {% data variables.product.prodname_github_app %} for your {% data variables.product.prodname_copilot_short %} agent. 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 %} - -{% 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.product.prodname_copilot_extension_short %}, click **Edit**. -1. In the "Identifying and authorizing users" section, under "Callback URL", enter your server's hostname, then click **Save changes**. - - > [!NOTE] This step is only required if you intend to request user authorization (OAuth) during installation. - > - > Your server's hostname is the forwarding endpoint that you copied from your terminal when you configured your server. For more information, 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. -1. In the "{% data variables.product.prodname_copilot_chat %}" row, select the **Access:** dropdown menu, then click **Read-only**. Click **Save changes**. -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.product.prodname_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 agent'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 changes**. -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?`. diff --git a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-extension.md b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-extension.md new file mode 100644 index 000000000000..287e8d08fa57 --- /dev/null +++ b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-extension.md @@ -0,0 +1,88 @@ +--- +title: Configuring your GitHub App for your Copilot extension +intro: 'Learn how to configure your {% data variables.product.prodname_github_app %} so that it is associated with your {% data variables.product.prodname_copilot_extension_short %}.' +defaultTool: agents +versions: + feature: copilot-extensions +topics: + - Copilot +shortTitle: Configure App for extension +type: how_to +redirect_from: + - /copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent +--- + +{% data reusables.copilot.copilot-extensions.public-preview-note %} + +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.product.prodname_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.product.prodname_copilot_extension_short %}, click **Edit**. +1. In the "Identifying and authorizing users" section, under "Callback URL", enter your server's hostname, then click **Save changes**. + + > [!NOTE] This step is only required if you intend to request user authorization (OAuth) during installation. + > + > Your server's hostname is the forwarding endpoint that you copied from your terminal when you configured your server. For more information, 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. +1. In the "{% data variables.product.prodname_copilot_chat %}" row, select the **Access:** dropdown menu, then click **Read-only**. Click **Save changes**. +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.product.prodname_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 changes**. +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.product.prodname_copilot_extension_short %}, click **Edit**. +1. In the "Identifying and authorizing users" section, under "Callback URL", enter your server's hostname, then click **Save changes**. + + > [!NOTE] This step is only required if you intend to request user authorization (OAuth) during installation. + > + > Your server's hostname is the forwarding endpoint that you copied from your terminal when you configured your server. For more information, 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. +1. In the "{% data variables.product.prodname_copilot_chat %}" row, select the **Access:** dropdown menu, then click **Read-only**. Click **Save changes**. +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.product.prodname_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 changes**. +{% 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/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-host-your-copilot-agent.md b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-host-your-copilot-extension.md similarity index 58% rename from content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-host-your-copilot-agent.md rename to content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-host-your-copilot-extension.md index d05fdd60195f..f0f93734baea 100644 --- a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-host-your-copilot-agent.md +++ b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-host-your-copilot-extension.md @@ -1,25 +1,26 @@ --- -title: Configuring your server to host your Copilot agent -intro: 'Learn how to make your {% data variables.product.prodname_copilot_short %} agent accessible to the internet.' +title: Configuring your server to host your 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 topics: - Copilot -shortTitle: Host your agent +shortTitle: Host your extension type: how_to --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} -Your {% data variables.product.prodname_copilot_agent_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/) or [serveo](https://serveo.net/). +Your {% data variables.product.prodname_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/) or [serveo](https://serveo.net/). 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.product.prodname_copilot_agent_short %}. For more information, see "[AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension)." +* You have created a {% data variables.product.prodname_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 @@ -28,25 +29,25 @@ Alternatively, if you are a {% data variables.product.prodname_codespaces %} use 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 agent is configured to run on. For example: +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:AGENT-PORT-NUMBER + ngrok http http://localhost:EXTENSION-PORT-NUMBER ``` * For a static domain: ```shell copy - ngrok http --domain=YOUR-STATIC-DOMAIN.ngrok-free.app AGENT-PORT-NUMBER + 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 agent. + > Keep the terminal window open while you are using your extension. ## Next steps diff --git a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension.md b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension.md index 8439a73daa87..7d4a73ab21af 100644 --- a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension.md +++ b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension.md @@ -9,7 +9,7 @@ shortTitle: Create GitHub App type: how_to --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} A {% data variables.product.prodname_copilot_extension_short %} is a {% data variables.product.prodname_github_app %} that is associated with a {% data variables.product.prodname_copilot_agent_short %}. The {% data variables.product.prodname_github_app %} you associate your {% data variables.product.prodname_copilot_agent_short %} with is used to authenticate the {% data variables.product.prodname_copilot_agent_short %} with {% data variables.product.prodname_dotcom %} and to authorize the {% data variables.product.prodname_copilot_agent_short %} to access the {% data variables.product.prodname_copilot_chat_short %} API. Each {% data variables.product.prodname_copilot_agent_short %} must be associated with a unique {% data variables.product.prodname_github_app %}. diff --git a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/index.md b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/index.md index 91fa716c6f1b..eb49ebbc71e4 100644 --- a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/index.md +++ b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/index.md @@ -7,7 +7,8 @@ versions: topics: - Copilot children: - - /configuring-your-server-to-host-your-copilot-agent + - /configuring-your-server-to-host-your-copilot-extension - /creating-a-github-app-for-your-copilot-extension - - /configuring-your-github-app-for-your-copilot-agent + - /configuring-your-github-app-for-your-copilot-extension --- + diff --git a/content/copilot/building-copilot-extensions/debugging-your-github-copilot-extension.md b/content/copilot/building-copilot-extensions/debugging-your-github-copilot-extension.md index edc2002452f7..21c2e3ffea2c 100644 --- a/content/copilot/building-copilot-extensions/debugging-your-github-copilot-extension.md +++ b/content/copilot/building-copilot-extensions/debugging-your-github-copilot-extension.md @@ -8,7 +8,7 @@ topics: shortTitle: Debug Copilot Extension --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} With the debug tool for {% data variables.product.prodname_copilot_extensions_short %}, you can chat with your {% data variables.product.prodname_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.product.prodname_copilot_agent_short %}. This is the only required flag to start the tool. diff --git a/content/copilot/building-copilot-extensions/index.md b/content/copilot/building-copilot-extensions/index.md index 885f16c44a98..4e6bac858e47 100644 --- a/content/copilot/building-copilot-extensions/index.md +++ b/content/copilot/building-copilot-extensions/index.md @@ -8,9 +8,10 @@ topics: - Copilot children: - /about-building-copilot-extensions - - /quickstart-for-github-copilot-extensions + - /quickstart-for-github-copilot-extensions-using-agents - /setting-up-copilot-extensions - /building-a-copilot-agent-for-your-copilot-extension + - /building-a-copilot-skillset-for-your-copilot-extension - /creating-a-copilot-extension - /debugging-your-github-copilot-extension - /managing-the-availability-of-your-copilot-extension diff --git a/content/copilot/building-copilot-extensions/managing-the-availability-of-your-copilot-extension.md b/content/copilot/building-copilot-extensions/managing-the-availability-of-your-copilot-extension.md index 3068669e7cf0..afc0ede58557 100644 --- a/content/copilot/building-copilot-extensions/managing-the-availability-of-your-copilot-extension.md +++ b/content/copilot/building-copilot-extensions/managing-the-availability-of-your-copilot-extension.md @@ -9,7 +9,7 @@ shortTitle: Manage Extension availability type: how_to --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} When you build a {% data variables.product.prodname_copilot_extension_short %}, you have two options for the visibility of your {% data variables.product.prodname_github_app %}: diff --git a/content/copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions.md b/content/copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions-using-agents.md similarity index 93% rename from content/copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions.md rename to content/copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions-using-agents.md index 5313603bdf9d..fe14d3629298 100644 --- a/content/copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions.md +++ b/content/copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions-using-agents.md @@ -1,21 +1,22 @@ --- -title: Quickstart for GitHub Copilot Extensions +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.product.prodname_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 topics: - Copilot shortTitle: Extensions quickstart --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} -The [Blackbeard extension](https://github.com/copilot-extensions/blackbeard-extension) is a {% data variables.product.prodname_copilot_extension %} built with 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. +The [Blackbeard extension](https://github.com/copilot-extensions/blackbeard-extension) is a {% data variables.product.prodname_copilot_extension %} built with 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. This guide uses a simple agent implementation, but the process is similar for skillsets. -This quickstart is designed to help you build and chat with the Blackbeard extension as quickly as possible. To instead learn how to create a new {% data variables.product.prodname_copilot_extension %}, see "[AUTOTITLE](/copilot/building-copilot-extensions/setting-up-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.product.prodname_copilot_extension %}, see "[AUTOTITLE](/copilot/building-copilot-extensions/setting-up-copilot-extensions)." ## 1. Create and install a {% data variables.product.prodname_github_app %} diff --git a/content/copilot/building-copilot-extensions/setting-up-copilot-extensions.md b/content/copilot/building-copilot-extensions/setting-up-copilot-extensions.md index 2535412c1ad1..c2271164b320 100644 --- a/content/copilot/building-copilot-extensions/setting-up-copilot-extensions.md +++ b/content/copilot/building-copilot-extensions/setting-up-copilot-extensions.md @@ -1,6 +1,7 @@ --- title: Setting up Copilot Extensions intro: 'Follow these steps to start building {% data variables.product.prodname_copilot_extensions_short %}.' +defaultTool: agents versions: feature: copilot-extensions topics: @@ -8,10 +9,16 @@ topics: shortTitle: Set up Copilot Extensions --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} This article is designed to help you build an entirely new {% data variables.product.prodname_copilot_extension %}. To instead learn how to quickly build and test a demo {% data variables.product.prodname_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.product.prodname_copilot_agents_short %} {% data variables.product.prodname_copilot_agents_short %} contain the custom code for your {% data variables.product.prodname_copilot_extension_short %}, and integrate with a {% data variables.product.prodname_github_app %} to form the {% data variables.product.prodname_copilot_extension_short %} itself. For more information, see "[AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/about-copilot-agents)." @@ -59,3 +66,43 @@ To learn how to change the visibility of your {% data variables.product.prodname ## Next steps To learn how to use your {% data variables.product.prodname_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.product.prodname_copilot_skillsets %} + +{% data variables.product.prodname_copilot_skillsets %} contain the custom code for your {% data variables.product.prodname_copilot_extension_short %}, and integrate with a {% data variables.product.prodname_github_app %} to form the {% data variables.product.prodname_copilot_extension_short %} itself. + +Unlike {% data variables.product.prodname_copilot_agents_short %}, {% data variables.product.prodname_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.product.prodname_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.product.prodname_copilot_skillset_short %} + +To make your {% data variables.product.prodname_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.product.prodname_copilot_skillset_short %} + +To create a {% data variables.product.prodname_copilot_extension_short %}, you need to create and configure a {% data variables.product.prodname_github_app %}, then integrate it with your {% data variables.product.prodname_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.product.prodname_copilot_skillset_short %} + +Choose one of two visibility levels for your {% data variables.product.prodname_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.product.prodname_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.product.prodname_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.product.prodname_copilot_extension_short %}, see "[AUTOTITLE](/copilot/using-github-copilot/using-extensions-to-integrate-external-tools-with-copilot-chat)." + +{% endskillsets %} diff --git a/content/copilot/customizing-copilot/extending-the-capabilities-of-github-copilot-in-your-organization.md b/content/copilot/customizing-copilot/extending-the-capabilities-of-github-copilot-in-your-organization.md index 469bd70693fa..61378c868a8c 100644 --- a/content/copilot/customizing-copilot/extending-the-capabilities-of-github-copilot-in-your-organization.md +++ b/content/copilot/customizing-copilot/extending-the-capabilities-of-github-copilot-in-your-organization.md @@ -16,7 +16,7 @@ redirect_from: - /copilot/managing-copilot/managing-github-copilot-in-your-organization/enhancing-copilot-for-your-organization/installing-github-copilot-extensions-for-your-organization --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} ## About {% data variables.product.prodname_copilot_extensions %} for your organization diff --git a/content/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/extending-the-capabilities-of-github-copilot-in-your-personal-account.md b/content/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/extending-the-capabilities-of-github-copilot-in-your-personal-account.md index 51bbaad40606..4bae2b029632 100644 --- a/content/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/extending-the-capabilities-of-github-copilot-in-your-personal-account.md +++ b/content/copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/extending-the-capabilities-of-github-copilot-in-your-personal-account.md @@ -12,7 +12,7 @@ redirect_from: - /copilot/managing-copilot/managing-copilot-as-an-individual-subscriber/installing-github-copilot-extensions-for-your-personal-account --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} ## About {% data variables.product.prodname_copilot_extensions %} for your personal account diff --git a/content/copilot/managing-copilot/managing-copilot-for-your-enterprise/managing-policies-and-features-for-copilot-in-your-enterprise.md b/content/copilot/managing-copilot/managing-copilot-for-your-enterprise/managing-policies-and-features-for-copilot-in-your-enterprise.md index ed3510926ca6..452b8cf88fc7 100644 --- a/content/copilot/managing-copilot/managing-copilot-for-your-enterprise/managing-policies-and-features-for-copilot-in-your-enterprise.md +++ b/content/copilot/managing-copilot/managing-copilot-for-your-enterprise/managing-policies-and-features-for-copilot-in-your-enterprise.md @@ -61,7 +61,7 @@ You can chat with {% data variables.product.prodname_copilot %} in your IDE to g ### {% data variables.product.prodname_copilot_extensions %} -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} {% data variables.product.prodname_copilot_extensions %} integrate external tools with {% data variables.product.prodname_copilot_chat %}, helping members of your enterprise reduce context switching, interact with tools using natural language, and customize their {% data variables.product.prodname_copilot_chat_short %} experience. diff --git a/content/copilot/managing-copilot/managing-github-copilot-in-your-organization/managing-policies-for-copilot-in-your-organization.md b/content/copilot/managing-copilot/managing-github-copilot-in-your-organization/managing-policies-for-copilot-in-your-organization.md index df8601d1ca4e..d939122881e5 100644 --- a/content/copilot/managing-copilot/managing-github-copilot-in-your-organization/managing-policies-for-copilot-in-your-organization.md +++ b/content/copilot/managing-copilot/managing-github-copilot-in-your-organization/managing-policies-for-copilot-in-your-organization.md @@ -64,7 +64,7 @@ If an organization member is assigned a seat by multiple organizations with diff ## Setting a policy for {% data variables.product.prodname_copilot_extensions %} in your organization -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} {% data variables.product.prodname_copilot_extensions %} integrate external tools with {% data variables.product.prodname_copilot_chat %}. See "[AUTOTITLE](/copilot/using-github-copilot/using-extensions-to-integrate-external-tools-with-copilot-chat)." diff --git a/content/copilot/using-github-copilot/asking-github-copilot-questions-in-your-ide.md b/content/copilot/using-github-copilot/asking-github-copilot-questions-in-your-ide.md index 6c7d0b7c22e5..93fe46f10cca 100644 --- a/content/copilot/using-github-copilot/asking-github-copilot-questions-in-your-ide.md +++ b/content/copilot/using-github-copilot/asking-github-copilot-questions-in-your-ide.md @@ -67,7 +67,7 @@ Chat participants include: In addition to the built-in {% data variables.product.prodname_vscode %} chat participants, you can also install {% data variables.product.prodname_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)." -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} To see all available chat participants, type `@` in the chat prompt box. diff --git a/content/copilot/using-github-copilot/using-extensions-to-integrate-external-tools-with-copilot-chat.md b/content/copilot/using-github-copilot/using-extensions-to-integrate-external-tools-with-copilot-chat.md index bea9c489406e..0996a94f47a1 100644 --- a/content/copilot/using-github-copilot/using-extensions-to-integrate-external-tools-with-copilot-chat.md +++ b/content/copilot/using-github-copilot/using-extensions-to-integrate-external-tools-with-copilot-chat.md @@ -14,7 +14,7 @@ redirect_from: - /copilot/github-copilot-chat/github-copilot-extensions --- -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} ## About {% data variables.product.prodname_copilot_extensions %} diff --git a/data/reusables/copilot/copilot-extensions/differences-between-agents-and-skillsets-1.md b/data/reusables/copilot/copilot-extensions/differences-between-agents-and-skillsets-1.md new file mode 100644 index 000000000000..bc331bfa22bc --- /dev/null +++ b/data/reusables/copilot/copilot-extensions/differences-between-agents-and-skillsets-1.md @@ -0,0 +1,2 @@ +Skillsets and agents are the two ways to extend {% data variables.product.prodname_copilot_short %}'s capabilities and context through the {% data variables.product.prodname_copilot_extensibility_platform_short %}. They let you integrate external services and APIs into {% data variables.product.prodname_copilot_chat_short %}, but each one serves different use cases and offers different levels of control and complexity: +* **Skillsets** are lightweight and streamlined, designed for developers who need {% data variables.product.prodname_copilot_short %} to perform specific tasks (e.g., data retrieval or simple operations) with minimal setup. They handle routing, prompt crafting, function evaluation, and response generation automatically, making them ideal for quick and straightforward integrations. diff --git a/data/reusables/copilot/copilot-extensions/differences-between-agents-and-skillsets-2.md b/data/reusables/copilot/copilot-extensions/differences-between-agents-and-skillsets-2.md new file mode 100644 index 000000000000..783bb9f187d1 --- /dev/null +++ b/data/reusables/copilot/copilot-extensions/differences-between-agents-and-skillsets-2.md @@ -0,0 +1 @@ +* **Agents** are for complex integrations that need full control over how requests are processed and responses are generated. They let you implement custom logic, integrate with other LLMs and/or the Copilot API, manage conversation context, and handle all aspects of the user interaction. While Agents require more engineering and maintenance, they offer maximum flexibility for sophisticated workflows. For more information about agents, see "[AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/about-copilot-agents)." diff --git a/data/reusables/copilot/copilot-extensions/extending-copilot-chat.md b/data/reusables/copilot/copilot-extensions/extending-copilot-chat.md index 599d221085d2..6c10c1287c58 100644 --- a/data/reusables/copilot/copilot-extensions/extending-copilot-chat.md +++ b/data/reusables/copilot/copilot-extensions/extending-copilot-chat.md @@ -1,4 +1,4 @@ -{% data reusables.copilot.copilot-extensions.beta-note %} +{% data reusables.copilot.copilot-extensions.public-preview-note %} {% data variables.product.prodname_copilot_extensions %} integrate the power of external tools into {% data variables.product.prodname_copilot_chat_short %}, helping you reduce context switching and receive responses with domain-specific context. You can install {% data variables.product.prodname_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. diff --git a/data/reusables/copilot/copilot-extensions/beta-note.md b/data/reusables/copilot/copilot-extensions/public-preview-note.md similarity index 100% rename from data/reusables/copilot/copilot-extensions/beta-note.md rename to data/reusables/copilot/copilot-extensions/public-preview-note.md diff --git a/data/reusables/copilot/copilot-extensions/skillsets-configuration-steps.md b/data/reusables/copilot/copilot-extensions/skillsets-configuration-steps.md new file mode 100644 index 000000000000..1f0696770a59 --- /dev/null +++ b/data/reusables/copilot/copilot-extensions/skillsets-configuration-steps.md @@ -0,0 +1,8 @@ +1. For each skill you want to add (maximum 5): + 1. Click **Add new skill**. + 1. Enter a clear **Name** for the skill (e.g., "Generate Lorem Ipsum Data"). + 1. Write a detailed **Inference description** to help {% data variables.product.prodname_copilot_short %} understand when to use this skill. + 1. Add your **API endpoint URL** that will receive the POST requests. + 1. In the **Parameter** field, add the JSON schema defining the expected request format. + 1. Click **Add Definition** to save your skill. +1. Click **Save** to save your skillset. diff --git a/data/variables/product.yml b/data/variables/product.yml index 1ef67a78e272..3e71e5ce156a 100644 --- a/data/variables/product.yml +++ b/data/variables/product.yml @@ -285,10 +285,16 @@ prodname_copilot_extensions_short: 'Copilot Extensions' prodname_copilot_extension_short: 'Copilot Extension' prodname_copilot_extensions_vsc: 'Copilot-enabled Visual Studio Code extensions' prodname_copilot_extension_vsc: 'Copilot-enabled Visual Studio Code extension' +prodname_copilot_extensibility_platform: 'GitHub Copilot Extensibility Platform' +prodname_copilot_extensibility_platform_short: 'Copilot Extensibility Platform' prodname_copilot_agent: 'GitHub Copilot agent' prodname_copilot_agent_short: 'Copilot agent' prodname_copilot_agents: 'GitHub Copilot agents' prodname_copilot_agents_short: 'Copilot agents' +prodname_copilot_skillset: 'Github Copilot skillset' +prodname_copilot_skillset_short: 'Copilot skillset' +prodname_copilot_skillsets: 'Github Copilot skillsets' +prodname_copilot_skillsets_short: 'Copilot skillsets' prodname_copilot_cli: 'GitHub Copilot in the CLI' prodname_copilot_cli_short: 'Copilot in the CLI' prodname_copilot_for_prs: 'Copilot pull request summaries' diff --git a/src/tools/lib/all-tools.js b/src/tools/lib/all-tools.js index fb82f5bda2f5..e2730c95b055 100644 --- a/src/tools/lib/all-tools.js +++ b/src/tools/lib/all-tools.js @@ -1,5 +1,6 @@ // all the tools available for the Tool Picker export const allTools = { + agents: 'Agents', api: 'API', azure_data_studio: 'Azure Data Studio', bash: 'Bash', @@ -11,6 +12,7 @@ export const allTools = { javascript: 'JavaScript', jetbrains: 'JetBrains IDEs', jetbrains_beta: 'JetBrains IDEs (Beta)', + skillsets: 'Skillsets', vimneovim: 'Vim/Neovim', powershell: 'PowerShell', visualstudio: 'Visual Studio',