# 关于 GitHub Copilot 命令行界面 (CLI) 的扩展

扩展允许你将自己的工具和斜杠命令添加到 GitHub Copilot 命令行界面 (CLI)其中，仅使用 CLI 附带的 SDK。

> \[!NOTE]
> GitHub Copilot 命令行界面 (CLI) 扩展目前是实验性功能，可能会更改。

扩展使你能够将自己的功能添加到 Copilot 命令行界面（CLI）。 每个扩展都是一个小型 Node.js 模块，作为独立进程与交互式会话并行运行，并回连到该会话。 通过该连接，扩展可以添加：

* ```
            **工具**，即 Copilot 在为你工作时可以调用的工具。
  ```
* ```
            由你自己运行的**斜杠命令**。
  ```

由于扩展在计算机上运行实际代码，因此可以添加内置工具没有的功能。 例如，扩展可以观察会话中发生的情况，并在多次工具调用之间持续累计总数，而一次性的 shell 命令则做不到这一点。

本文介绍扩展的工作原理，以及 Copilot 命令行界面（CLI） 如何处理它们。 有关生成自己的扩展的实践指南，请参阅 [为 GitHub Copilot 命令行界面 (CLI) 创建扩展](/zh/copilot/tutorials/create-an-extension)。

> \[!WARNING]
> 扩展程序会在你的计算机上运行，并使用你的权限。 仅加载信任的扩展代码，就像只运行未自行编写的任何其他脚本一样。

## 如何发现扩展

Copilot 命令行界面（CLI） 启动时，会在多个位置查找扩展。 每个扩展都位于各自的子目录中，并且该子目录必须包含一个名为 `extension.mjs`、`extension.cjs` 或 `extension.js` 的入口文件。 这些都是 JavaScript 文件：Copilot 命令行界面（CLI） 会通过 Node.js 直接运行入口文件，因此扩展必须使用 JavaScript 编写——目前不支持 TypeScript 和其他语言。

子目录的名称将成为扩展的名称。

| 来源                                 | 位置                            | Availability          |
| ---------------------------------- | ----------------------------- | --------------------- |
| **项目**                             |                               |                       |
| `.github/extensions/NAME/` 在当前存储库中 | 可供在该存储库中工作的任何人使用。             |                       |
| **用户**                             | `~/.copilot/extensions/NAME/` | 在所有 CLI 会话中，每个目录中都可用。 |
| \*\*\*\*插件                         | 已安装的插件                        | 凡是启用了该插件的地方，均可使用。     |

## 选择扩展程序的安装位置

将扩展目录放在何处可确定谁可以使用它：

* \*\*`.github/extensions/`\*\*当扩展特定于该项目时，将其放入存储库中，并且你想要与在那里工作的每个人共享它。
* 如果你希望该扩展在你自己的所有会话中都可用，而不管你从哪个目录启动 CLI，就把它放在 **`~/.copilot/extensions/`** 中。

这两个位置遵循完全相同的结构（包含文件的 `extension.mjs` 命名子目录），因此只需重新定位其文件夹即可将扩展从一个位置移动到另一个位置。

## 启用扩展

扩展当前是一项实验性功能，因此需要启用实验性功能。 可以通过执行以下操作之一来执行此操作：

* 使用 `--experimental` 标志启动 CLI。
* 在 `/experimental on` 交互式会话中运行斜杠命令。

## 更改 CLI 处理扩展的方式

你可以使用 `/extensions mode` 命令来限制 Copilot 对扩展的访问权限，或将这些扩展完全禁用。 使用此命令时，会获得三个选项：

* **加载和扩充** （默认值）- CLI 运行扩展， \_并\_Copilot 可以管理它们。
* **仅加载** — CLI 运行扩展，但 Copilot 无法管理它们。
* **已禁用** — 扩展在当前会话中完全关闭，在将来的会话中将保持禁用状态，直到切换到其他两个设置之一。 其他当前会话不受影响。

所做的任何更改都会立即在当前会话中生效：

* **切换到“已禁用**”会停止当前正在运行的任何扩展。 其进程已关闭，并且其工具不再可用。
* **从“已禁用”** 切换到其他任一设置将启动扩展。
* 在 **“仅加载”** 和 **“加载并增强”** 之间切换只会改变Copilot是否能够管理你的扩展程序。

### “管理扩展”的含义

在 **“加载和增强** ”模式下， Copilot 提供一组额外的工具，用于在扩展系统上直接工作，作为执行请求的一部分。 借助这些工具，Copilot 可以：

* **列出** 它发现的扩展，并查看其状态。
* ```
            **检查**扩展（包括其日志文件的末尾内容），以帮助诊断失败或行为异常的扩展。
  ```
* ```
            **搭建**新扩展：为你生成一个基础的 `extension.mjs` 文件，以供后续开发使用。
  ```
* **重新加载** 扩展，以便它（或你）刚刚编写的代码生效，而无需重启会话。

这就是为什么你可以让 Copilot 为你构建一个扩展。
Copilot 可以创建文件、编写代码并重新加载它，而无需离开会话。

如果您希望保留一组已知且受信任的扩展继续运行，但又不想让 Copilot 在其工作过程中附带创建、重新加载或以其他方式更改在您的计算机上运行的扩展代码，请选择 **仅加载**。 现有扩展仍在运行，并且 Copilot 仍可调用它们提供的工具;它根本无法自行管理扩展。

## 扩展与插件的比较

扩展和插件都添加了 Copilot 命令行界面（CLI）功能，但它们服务于不同的目的：

* **扩展**是一个 JavaScript 模块，你编写该模块以添加工具和斜杠命令，由会话中运行的代码提供支持。
* **插件**是一个可安装包，可将可重用组件（如代理、技能、挂钩和集成）捆绑在一起，并且可以通过市场分发。

有关插件的详细信息，请参阅 [关于 GitHub Copilot 插件](/zh/copilot/concepts/agents/about-plugins)。

## 延伸阅读

* [为 GitHub Copilot 命令行界面 (CLI) 创建扩展](/zh/copilot/tutorials/create-an-extension)
* [GitHub Copilot CLI 命令参考](/zh/copilot/reference/copilot-cli-reference/cli-command-reference#slash-commands-in-the-interactive-interface)
* [GitHub Copilot 命令行界面 (CLI)](/zh/copilot/how-tos/copilot-cli)