From 5478cfd9bf2be4668ae5bbeec01593226e954b1b Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 15:37:24 +0000 Subject: [PATCH 1/7] Remove plan availability note from allow-specific-actions-intro reusable (#59390) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: angel-jiakou <115738347+angel-jiakou@users.noreply.github.com> --- data/reusables/actions/allow-specific-actions-intro.md | 7 ------- package-lock.json | 1 + 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/data/reusables/actions/allow-specific-actions-intro.md b/data/reusables/actions/allow-specific-actions-intro.md index 422954be0c6d..d3848577fa6a 100644 --- a/data/reusables/actions/allow-specific-actions-intro.md +++ b/data/reusables/actions/allow-specific-actions-intro.md @@ -26,11 +26,4 @@ When you choose {% data reusables.actions.policy-label-for-select-actions-workfl Use the `!` prefix to block patterns. For example, to allow all actions{% ifversion actions-workflow-policy %} and reusable workflows{% endif %} from the `space-org` organization, but block a specific action like `space-org/action`, you can specify `space-org/*, !space-org/action@*`. By default, only actions{% ifversion actions-workflow-policy %} and reusable workflows{% endif %} specified in the list will be allowed. To allow all actions{% ifversion actions-workflow-policy %} and reusable workflows{% endif %} while also blocking specific actions, you can specify `*, !space-org/action@*`. {% endif %} - {% ifversion fpt or ghec %} - - > [!NOTE] - > For {% data variables.product.prodname_free_user %}, {% data variables.product.prodname_pro %}, {% data variables.product.prodname_free_team %} for organizations, or {% data variables.product.prodname_team %} plans, the **Allow specified actions{% ifversion actions-workflow-policy %} and reusable workflows{% endif %}** option is only available in public repositories. - - {% endif %} - This procedure demonstrates how to add specific actions{% ifversion actions-workflow-policy %} and reusable workflows{% endif %} to the list. diff --git a/package-lock.json b/package-lock.json index adde603e9480..3dff5c246fb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17159,6 +17159,7 @@ "name": "eslint-plugin-custom-rules", "version": "1.0.0", "dev": true, + "license": "MIT", "peerDependencies": { "eslint": "^8.0.0 || ^9.0.0" } From 2482284f8e182541c1fa9b7455a2f3ea70ab25ec Mon Sep 17 00:00:00 2001 From: William Martin Date: Thu, 29 Jan 2026 17:53:14 +0100 Subject: [PATCH 2/7] Rewrite copilot CLI ACP docs (#59400) Co-authored-by: hubwriter Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- content/copilot/reference/acp-server.md | 432 +++++------------------- 1 file changed, 80 insertions(+), 352 deletions(-) diff --git a/content/copilot/reference/acp-server.md b/content/copilot/reference/acp-server.md index 8b5657007fb0..f1089fb517b2 100644 --- a/content/copilot/reference/acp-server.md +++ b/content/copilot/reference/acp-server.md @@ -11,388 +11,116 @@ category: contentType: reference --- +> [!NOTE] +> ACP support in {% data variables.copilot.copilot_cli %} is in {% data variables.release-phases.public_preview %} and subject to change. ## Overview -Agent Client Protocol (ACP) is a standardized protocol that enables external clients, such as IDEs, editors, and other tools, to communicate with the {% data variables.product.prodname_copilot_short %} agent runtime. It provides a structured way to create and manage agent sessions, send prompts, receive streaming responses, and handle permission requests. +The Agent Client Protocol (ACP) is a protocol that standardizes communication between clients (such as code editors and IDEs) and coding agents (such as {% data variables.copilot.copilot_cli_short %}). For more details about this protocol, see the [official introduction](https://agentclientprotocol.com/get-started/introduction). -## Architecture - -```text -┌─────────────────┐ ┌─────────────────────┐ -│ IDE / Editor │ ACP │ Copilot Agent │ -│ (ACP Client) │◄───────►│ Runtime │ -│ │ stdio/ │ (ACP Server) │ -│ │ TCP │ │ -└─────────────────┘ └─────────────────────┘ -``` +## Starting the ACP server -The ACP server runs as part of {% data variables.copilot.copilot_cli %} and exposes the agent's capabilities through a well-defined protocol. +{% data variables.copilot.copilot_cli %} can be started as an ACP server using the `--acp` flag. The server supports two modes, `stdio` and `TCP`. -## Starting the ACP server +### stdio mode (recommended for IDE integration) -### Stdio Mode (Recommended for IDE Integration) +By default, when providing the `--acp` flag, `stdio` mode will be inferred. The `--stdio` flag can also be provided for disambiguation. ```bash copilot --acp --stdio ``` -Communication happens over stdin/stdout using newline-delimited JSON (NDJSON). +### TCP mode -### TCP Mode +If the `--port` flag is provided in combination with the `--acp` flag, the server is started in TCP mode. ```bash copilot --acp --port 3000 ``` -Communication happens over a TCP socket on the specified port. - -## Protocol flow - -### 1. Initialize connection - -```typescript -// Client sends initialize request -const response = await connection.initialize({ - clientInfo: { - name: "MyIDE", - version: "1.0" - } -}); - -// Server responds with capabilities -// { -// serverInfo: { name: "copilot-agent-runtime", version: "x.x.x" }, -// capabilities: { ... } -// } -``` - -### 2. Create a session - -```typescript -const session = await connection.newSession({ - cwd: "/path/to/project" -}); - -// Returns: { sessionId: "uuid-..." } -``` +## Integrating with the ACP server -### 3. Send prompts +There is a growing ecosystem of libraries to programmatically interact with ACP servers. Given {% data variables.copilot.copilot_cli %} is correctly installed and authenticated, the following example demonstrates using the [typescript](https://agentclientprotocol.com/libraries/typescript) client to send a single prompt and print the AI response. ```typescript -await connection.prompt({ - sessionId: session.sessionId, - prompt: [ - { type: "text", text: "Fix the authentication bug in login.ts" } - ] -}); -``` - -### 4. Receive session updates +import * as acp from "@agentclientprotocol/sdk"; +import { spawn } from "node:child_process"; +import { Readable, Writable } from "node:stream"; -The client receives real-time updates via the `sessionUpdate` callback: +async function main() { + const executable = process.env.COPILOT_CLI_PATH ?? "copilot"; -```typescript -const client: acp.Client = { - async sessionUpdate(params) { - // params.state: "idle" | "working" - // params.lastUpdateId: number - // params.updates: Array of content updates - - for (const update of params.updates) { - switch (update.type) { - case "text": - console.log("Agent says:", update.text); - break; - case "tool": - console.log("Tool execution:", update.name, update.status); - break; - } - } - } -}; -``` + // ACP uses standard input/output (stdin/stdout) for transport; we pipe these for the NDJSON stream. + const copilotProcess = spawn(executable, ["--acp", "--stdio"], { + stdio: ["pipe", "pipe", "inherit"], + }); -### 5. Handle permission requests + if (!copilotProcess.stdin || !copilotProcess.stdout) { + throw new Error("Failed to start Copilot ACP process with piped stdio."); + } -The agent requests permission for sensitive operations: + // Create ACP streams (NDJSON over stdio) + const output = Writable.toWeb(copilotProcess.stdin) as WritableStream; + const input = Readable.toWeb(copilotProcess.stdout) as ReadableStream; + const stream = acp.ndJsonStream(output, input); -```typescript -const client: acp.Client = { + const client: acp.Client = { async requestPermission(params) { - // params.request contains details about what permission is needed - // e.g., tool execution, file access, URL fetch - - // Display dialog to user and return their choice - return { - outcome: { - outcome: "selected", - optionId: "allow_once" // or "allow_always" or "reject_once" - } - }; - } -}; -``` - -## Content types - -### Text content - -```typescript -{ - type: "text", - text: "Your message here" -} -``` - -### Image content - -```typescript -{ - type: "image", - data: "", - mimeType: "image/png" // or "image/jpeg", "image/gif", "image/webp" -} -``` - -### Embedded resources - -```typescript -{ - type: "resource", - resource: { - uri: "file:///path/to/file.txt", - text: "file contents", - mimeType: "text/plain" - } -} -``` - -### Blob data - -```typescript -{ - type: "blob", - data: "", - mimeType: "application/octet-stream" -} -``` - -## Tool execution updates - -When the agent executes tools, clients receive detailed updates: - -```typescript -{ - type: "tool", - id: "tool-execution-id", - name: "edit", // Tool name - status: "running", // "running" | "completed" - kind: "edit", // Tool category - input: { ... }, // Tool parameters - output: { ... }, // Tool result (when completed) - diff: "..." // Diff content for edit operations -} -``` - -### Tool kinds - -| Kind | Description | -|------|-------------| -| `execute` | Command execution (bash) | -| `read` | File reading operations | -| `edit` | File modifications | -| `delete` | File deletions | -| `create` | File creation | -| `search` | Code search (grep, glob) | -| `fetch` | Web fetching | -| `agent` | Sub-agent invocation | -| `github` | GitHub API operations | -| `other` | Other tool types | - -## Permission types - -### Tool permissions - -Requested when the agent wants to execute a tool: - -```typescript -{ - type: "tool", - toolName: "bash", - input: { command: "npm install" } -} -``` - -### Path permissions - -Requested for file system access: - -```typescript -{ - type: "path", - path: "/path/to/sensitive/file", - operation: "write" // or "read" -} -``` - -### URL permissions - -Requested for network access: - -```typescript -{ - type: "url", - url: "https://api.example.com/data", - operation: "fetch" -} -``` - -## Session lifecycle - -```text -┌─────────────┐ -│ Created │ -└──────┬──────┘ - │ prompt() - ▼ -┌─────────────┐ -│ Working │◄───┐ -└──────┬──────┘ │ - │ │ prompt() - ▼ │ -┌─────────────┐ │ -│ Idle │────┘ -└──────┬──────┘ - │ destroy() - ▼ -┌─────────────┐ -│ Destroyed │ -└─────────────┘ -``` - -## Error handling + // This example should not trigger tool calls; if it does, refuse. + return { outcome: { outcome: "cancelled" } }; + }, -Errors are communicated through the protocol's standard error response format: - -```typescript -{ - error: { - code: -32600, - message: "Invalid request", - data: { ... } - } -} -``` - -## Example: Full Client Implementation - -```typescript -import * as acp from '@anthropic/acp-sdk'; -import { spawn } from 'child_process'; - -async function main() { - // Start the ACP server - const process = spawn('copilot', ['--acp', '--stdio'], { - stdio: ['pipe', 'pipe', 'inherit'] - }); - - // Create transport stream - const stream = acp.ndJsonStream(process.stdin, process.stdout); - - // Define client handlers - const client: acp.Client = { - async requestPermission(params) { - console.log('Permission requested:', params.request); - // Auto-approve for this example - return { - outcome: { outcome: "selected", optionId: "allow_once" } - }; - }, - - async sessionUpdate(params) { - console.log(`Session ${params.sessionId} state: ${params.state}`); - for (const update of params.updates) { - if (update.type === 'text') { - process.stdout.write(update.text); - } else if (update.type === 'tool') { - console.log(`Tool: ${update.name} - ${update.status}`); - } - } - } - }; - - // Establish connection - const connection = new acp.ClientSideConnection(client, stream); - - // Initialize - await connection.initialize({ - clientInfo: { name: "example-client", version: "1.0.0" } - }); - - // Create session - const session = await connection.newSession({ - cwd: process.cwd() - }); - - // Send prompt - await connection.prompt({ - sessionId: session.sessionId, - prompt: [ - { type: "text", text: "List the files in the current directory" } - ] - }); - - // Wait for completion (in real app, handle via sessionUpdate) - await new Promise(resolve => setTimeout(resolve, 10000)); - - // Cleanup - process.kill(); + async sessionUpdate(params) { + const update = params.update; + + if (update.sessionUpdate === "agent_message_chunk" && update.content.type === "text") { + process.stdout.write(update.content.text); + } + }, + }; + + const connection = new acp.ClientSideConnection((_agent) => client, stream); + + await connection.initialize({ + protocolVersion: acp.PROTOCOL_VERSION, + clientCapabilities: {}, + }); + + const sessionResult = await connection.newSession({ + cwd: process.cwd(), + mcpServers: [], + }); + + process.stdout.write("Session started!\n"); + const promptText = "Hello ACP Server!"; + process.stdout.write(`Sending prompt: '${promptText}'\n`); + + const promptResult = await connection.prompt({ + sessionId: sessionResult.sessionId, + prompt: [{ type: "text", text: promptText }], + }); + + process.stdout.write("\n"); + + if (promptResult.stopReason !== "end_turn") { + process.stderr.write(`Prompt finished with stopReason=${promptResult.stopReason}\n`); + } + + // Best-effort cleanup + copilotProcess.stdin.end(); + copilotProcess.kill("SIGTERM"); + await new Promise((resolve) => { + copilotProcess.once("exit", () => resolve()); + setTimeout(() => resolve(), 2000); + }); } -main().catch(console.error); +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); ``` -## Configuration - -### Runtime settings - -The ACP server inherits settings from the {% data variables.product.prodname_copilot_short %} runtime: - -* **Model selection**: Configured via environment or runtime settings -* **Tool permissions**: Managed through the permission service -* **Logging**: Configurable log level and directory - -### Environment variables - -| Variable | Description | -|----------|-------------| -| `COPILOT_LOG_LEVEL` | Log verbosity (debug, info, warn, error) | -| `COPILOT_LOG_DIR` | Directory for log files | - -## Best practices - -1. **Use Stdio Mode for IDEs**: More reliable than TCP for local integrations -1. **Handle Permissions Gracefully**: Always implement the `requestPermission` callback -1. **Process Updates Incrementally**: Don't wait for completion to show progress -1. **Clean Up Sessions**: Call destroy when done to free resources -1. **Handle Reconnection**: Implement retry logic for network transports - -## Source files - -| File | Description | -|------|-------------| -| `src/cli/acp/server.ts` | Main ACP server implementation | -| `src/cli/acp/mapping.ts` | Event transformation layer | -| `src/cli/acp/permissionHandlers.ts` | Permission request handlers | -| `src/cli/acp/permissionMapping.ts` | Permission mapping utilities | - -## Testing - -ACP has end-to-end tests that can be run with: - -```bash -CI=true npm run test:cli-e2e -- test/cli/e2e/acp.test.ts -``` +## Further reading -Test captures are available in `test/cli/e2e/captures/acp/` showing various content type handling scenarios. +* [Official ACP documentation](https://agentclientprotocol.com/protocol/overview) From 596e5a0544593e9c6d6abfdcc7942ffaaf5bc71c Mon Sep 17 00:00:00 2001 From: Nicholas Gioachini <93983535+nikogio@users.noreply.github.com> Date: Thu, 29 Jan 2026 15:27:25 -0300 Subject: [PATCH 3/7] update(docs):Clarify that Copilot only responds to mentions in open PRs and not after merging or closing. (#42482) Co-authored-by: Sharra-writes Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../coding-agent/troubleshoot-coding-agent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/copilot/how-tos/use-copilot-agents/coding-agent/troubleshoot-coding-agent.md b/content/copilot/how-tos/use-copilot-agents/coding-agent/troubleshoot-coding-agent.md index 75d53dd0b187..d99a920b9f9e 100644 --- a/content/copilot/how-tos/use-copilot-agents/coding-agent/troubleshoot-coding-agent.md +++ b/content/copilot/how-tos/use-copilot-agents/coding-agent/troubleshoot-coding-agent.md @@ -71,7 +71,7 @@ If there is a "{% data variables.product.prodname_copilot_short %} started work" If you do have write access, and you mention `@copilot` on a pull request that is assigned to {% data variables.product.prodname_copilot_short %}, the comment is passed to {% data variables.copilot.copilot_coding_agent %}. An eyes emoji (👀) is added to your comment to indicate that {% data variables.copilot.copilot_coding_agent %} has seen your comment. Shortly after, a "{% data variables.product.prodname_copilot_short %} started work" event is added to the pull request timeline. -If this doesn't happen, {% data variables.product.prodname_copilot_short %} may have been unassigned from the pull request, or you may not have write access. +If this doesn't happen, {% data variables.product.prodname_copilot_short %} may have been unassigned from the pull request, or you may not have write access. Note that {% data variables.product.prodname_copilot_short %} only responds to mentions in open pull requests. Once a pull request is merged or closed, {% data variables.copilot.copilot_coding_agent %} will not respond to new mentions or comments to better focus on active development work. ## Based on the agent session logs, {% data variables.product.prodname_copilot_short %} appears to be stuck From 1a4f0ecd2e2f866440229788d353fa6d3c25446f Mon Sep 17 00:00:00 2001 From: cmuto09 Date: Thu, 29 Jan 2026 11:33:10 -0700 Subject: [PATCH 4/7] =?UTF-8?q?added=20arm=20runners=20to=20standard=20run?= =?UTF-8?q?ner=20availability=20for=20private/interna=E2=80=A6=20(#59394)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/supported-github-runners.md | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/data/reusables/actions/supported-github-runners.md b/data/reusables/actions/supported-github-runners.md index 8cfb8859e219..50413dde65bf 100644 --- a/data/reusables/actions/supported-github-runners.md +++ b/data/reusables/actions/supported-github-runners.md @@ -108,7 +108,7 @@ For {% ifversion ghec %}internal and{% endif %} private repositories, jobs using Linux 2 - 7 GB + 8 GB 14 GB x64 @@ -120,7 +120,7 @@ For {% ifversion ghec %}internal and{% endif %} private repositories, jobs using Windows 2 - 7 GB + 8 GB 14 GB x64 @@ -129,6 +129,27 @@ For {% ifversion ghec %}internal and{% endif %} private repositories, jobs using windows-2022 + + Linux + 2 + 8 GB + 14 GB + arm64 + + ubuntu-24.04-arm, + ubuntu-22.04-arm + + + + Windows + 2 + 8 GB + 14 GB + arm64 + + windows-11-arm + + macOS 4 From 9793a81fec16e8ff75c465f8676903aeaa027639 Mon Sep 17 00:00:00 2001 From: Kevin Heis Date: Thu, 29 Jan 2026 10:40:51 -0800 Subject: [PATCH 5/7] Fix external link checker alert and wrong pat name (#59386) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: heiskr <1221423+heiskr@users.noreply.github.com> --- .github/workflows/link-check-external.yml | 18 +++++++++++++++--- .github/workflows/link-check-internal.yml | 8 ++++---- src/links/scripts/check-links-external.ts | 3 --- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/.github/workflows/link-check-external.yml b/.github/workflows/link-check-external.yml index cb0bc35af3fd..663b0ab5a04a 100644 --- a/.github/workflows/link-check-external.yml +++ b/.github/workflows/link-check-external.yml @@ -42,18 +42,30 @@ jobs: fi - name: Upload report artifact - if: failure() + if: always() uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: external-link-report path: artifacts/external-link-report.* retention-days: 14 + if-no-files-found: ignore + + - name: Check if report exists + if: always() + id: check_report + run: | + if [ -f "artifacts/external-link-report.md" ]; then + echo "has_report=true" >> $GITHUB_OUTPUT + else + echo "has_report=false" >> $GITHUB_OUTPUT + echo "No broken link report generated - all links valid!" + fi - name: Create issue if broken links found - if: failure() + if: always() && steps.check_report.outputs.has_report == 'true' uses: peter-evans/create-issue-from-file@fca9117c27cdc29c6c4db3b86c48e4115a786710 # v5 with: - token: ${{ secrets.DOCS_BOT_PAT_WORKFLOW }} + token: ${{ secrets.DOCS_BOT_PAT_BASE }} repository: github/docs-content title: '🌐 Broken External Links Report' content-filepath: artifacts/external-link-report.md diff --git a/.github/workflows/link-check-internal.yml b/.github/workflows/link-check-internal.yml index 6dc735d57ffb..ebd0b08765a8 100644 --- a/.github/workflows/link-check-internal.yml +++ b/.github/workflows/link-check-internal.yml @@ -78,7 +78,7 @@ jobs: if: matrix.language != 'en' uses: ./.github/actions/clone-translations with: - token: ${{ secrets.DOCS_BOT_PAT_READPUBLICKEY }} + token: ${{ secrets.DOCS_BOT_PAT_BASE }} - name: Check internal links env: @@ -125,14 +125,14 @@ jobs: # Check if any reports exist if ls reports/*.md 1> /dev/null 2>&1; then echo "has_reports=true" >> $GITHUB_OUTPUT - + # Combine all markdown reports echo "# Internal Links Report" > combined-report.md echo "" >> combined-report.md echo "Generated: $(date -u +'%Y-%m-%d %H:%M UTC')" >> combined-report.md echo "[Action run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})" >> combined-report.md echo "" >> combined-report.md - + for report in reports/*.md; do echo "---" >> combined-report.md cat "$report" >> combined-report.md @@ -147,7 +147,7 @@ jobs: if: steps.combine.outputs.has_reports == 'true' uses: peter-evans/create-issue-from-file@fca9117c27cdc29c6c4db3b86c48e4115a786710 # v5 with: - token: ${{ secrets.DOCS_BOT_PAT_WORKFLOW }} + token: ${{ secrets.DOCS_BOT_PAT_BASE }} repository: github/docs-content title: '🔗 Broken Internal Links Report' content-filepath: combined-report.md diff --git a/src/links/scripts/check-links-external.ts b/src/links/scripts/check-links-external.ts index 1fc3eebb602e..f94523917913 100644 --- a/src/links/scripts/check-links-external.ts +++ b/src/links/scripts/check-links-external.ts @@ -356,9 +356,6 @@ async function main() { console.log(`Created report issue: ${newReport.html_url}`) } - - // Exit with error if broken links found - process.exit(1) } // Run if invoked directly From cca754a1d571dbdfd3b6760199dfd37656d48f1b Mon Sep 17 00:00:00 2001 From: Kathleen <36471738+kathleenqin@users.noreply.github.com> Date: Thu, 29 Jan 2026 12:53:19 -0800 Subject: [PATCH 6/7] Removing copilot metrics api from the table of unavailable features (#59392) Co-authored-by: isaacmbrown Co-authored-by: Sunbrye Ly <56200261+sunbrye@users.noreply.github.com> --- ...-overview-for-github-enterprise-cloud-with-data-residency.md | 1 - content/rest/copilot/copilot-metrics.md | 2 -- 2 files changed, 3 deletions(-) diff --git a/content/admin/data-residency/feature-overview-for-github-enterprise-cloud-with-data-residency.md b/content/admin/data-residency/feature-overview-for-github-enterprise-cloud-with-data-residency.md index 5482f22c34f7..bd8925561cfd 100644 --- a/content/admin/data-residency/feature-overview-for-github-enterprise-cloud-with-data-residency.md +++ b/content/admin/data-residency/feature-overview-for-github-enterprise-cloud-with-data-residency.md @@ -20,7 +20,6 @@ The following features are currently unavailable on {% data variables.enterprise | Feature | Details | More information | | :- | :- | :- | -| {% data variables.product.prodname_copilot_short %} Metrics API | Currently unavailable. | [AUTOTITLE](/rest/copilot/copilot-metrics) | | {% data variables.product.prodname_github_codespaces %} | Currently unavailable. | [AUTOTITLE](/codespaces/quickstart) | | macOS runners for {% data variables.product.prodname_actions %} | Currently unavailable. | [AUTOTITLE](/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners) | | Maven and Gradle support for {% data variables.product.prodname_registry %} | Currently unavailable. | [AUTOTITLE](/packages/working-with-a-github-packages-registry/working-with-the-apache-maven-registry) | diff --git a/content/rest/copilot/copilot-metrics.md b/content/rest/copilot/copilot-metrics.md index 42df36aa7635..bc2c8a6035c7 100644 --- a/content/rest/copilot/copilot-metrics.md +++ b/content/rest/copilot/copilot-metrics.md @@ -20,6 +20,4 @@ You can use these endpoints to get a breakdown of aggregated metrics for various * Breakdowns by language and IDE * The option to view metrics for an enterprise, organization, or team -{% data reusables.copilot.metrics-api-ghecom %} - From 2c0f6a6866c390486e42f9cb8afdd15a978e6393 Mon Sep 17 00:00:00 2001 From: astropedrito <96799026+astropedrito@users.noreply.github.com> Date: Thu, 29 Jan 2026 21:57:02 +0100 Subject: [PATCH 7/7] Update team hierarchy rules in documentation (#59341) Co-authored-by: Justin Alex <1155821+jusuchin85@users.noreply.github.com> Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com> --- .../moving-a-team-in-your-organizations-hierarchy.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/organizations/organizing-members-into-teams/moving-a-team-in-your-organizations-hierarchy.md b/content/organizations/organizing-members-into-teams/moving-a-team-in-your-organizations-hierarchy.md index 6c17c703d342..0c93cc62954d 100644 --- a/content/organizations/organizing-members-into-teams/moving-a-team-in-your-organizations-hierarchy.md +++ b/content/organizations/organizing-members-into-teams/moving-a-team-in-your-organizations-hierarchy.md @@ -23,6 +23,7 @@ Organization owners can change the parent of any team. Team maintainers can chan > [!TIP] > * You cannot change a team's parent to a secret team. For more information, see [AUTOTITLE](/organizations/organizing-members-into-teams/about-teams). > * You cannot nest a parent team beneath one of its child teams. +> * Adding an existing child team to a new parent team removes it from its previous parent team. {% data reusables.profile.access_org %} {% data reusables.user-settings.access_org %}