GitHub Copilot
GitHub Copilot 是 OAR 一开始就提供的提供商:它始终可用,并使用中继主机上已登录的 Copilot CLI。中继在两种引擎之一上运行它。SDK 引擎是默认引擎,为你提供引导、后台任务面板和多选问题。扩展引擎在一个你可以观看的终端中运行真正的 Copilot CLI。
使用你自己密钥的 OpenAI 运行在同样的两种引擎上,因此本页关于引擎的章节同样适用于它。它的密钥和模型见 OpenAI 页面。
你需要什么 #
- 中继主机上已登录的 Copilot CLI。用
npm install -g @github/安装它,运行一次copilot copilot并登录。你的 GitHub 账户需要一个包含 Copilot CLI 的 Copilot 套餐。 - 安装或升级 CLI 后重启中继。 中继在启动时查找 CLI 的运行时,看不到之后的安装。
- 已登录的 GitHub CLI(
gh),用于oar copilot、Windows 上的扩展引擎会话,以及 Check Usage(查看用量)中的 Copilot 卡片。 - tmux(可选,Linux 和 macOS),如果你想用 🖥️ Inspect tmux console(查看 tmux 控制台)观看会话的终端。
中继不会安装或更新 Copilot CLI。在 Settings → Providers → Copilot(设置 → 提供商 → Copilot)中,顶部的 GitHub Copilot CLI 一行只报告它的状态。
OAR 如何找到 CLI #
SDK 引擎驱动 Copilot CLI 自带的运行时。启动时,中继会在 CLI 的包缓存中查找,并采用其中最新的版本:
| 系统 | 文件夹 |
|---|---|
| Linux | ~/. 和 ~/. |
| macOS | ~/ |
| Windows | %LOCALAPPDATA%\ |
在 Linux 上,如果你设置了 XDG_ 和 XDG_,这两个文件夹会随之变化。设置 COPILOT_ 可以添加一个要搜索的文件夹,设置 COPILOT_ 则直接指定运行时的 copilot- 目录。如果什么都没找到,SDK 引擎就不可用(见选择引擎)。
使用 oar copilot #
如果其端口上没有中继响应,oar copilot 会在后台启动中继,然后在你的 shell 中打开 Copilot CLI(gh copilot)。由它启动的中继会在会话结束时再次停止。-- 之后的参数会传给 gh copilot。
oar copilot
oar copilot --port 3400 -- --help
每次运行还会在 ~/. 中写入或刷新一个小的包装器,这是一个用户全局扩展,用于把 OAR 的扩展加载到 Copilot CLI 中。oar copilot --install- 只做这件事然后退出(它不需要 gh);--no- 在一次运行中跳过它。如果缺少 gh,oar copilot 会说明并停止;请安装 GitHub CLI,或用 oar start 只运行中继。
两种引擎 #
| SDK 引擎 | 扩展引擎 | |
|---|---|---|
| 运行的是什么 | 每个对话一个无头 worker,驱动 Copilot CLI 自带的运行时 | 终端会话中的 Copilot CLI,加载了 OAR 的扩展 |
| 默认 | 是,自 0.9.2 起 | 在中继无法运行 SDK 引擎时使用 |
| 需要 | 已安装并已登录的 Copilot CLI | 同上,Windows 上还需要 gh |
| 一轮期间发送的消息 | Steer(引导):它会进入正在运行的一轮 0.9.3 新增 | 在队列中等待,直到该轮结束 |
| 后台任务 | 列在输入区的任务面板中,每个都有一个可用的 Stop(停止) 0.9.3 新增 | 不在面板中 |
| 多选问题 | 是:模型可以把问题标记为多选,选项卡片上有一个 Select several(多选)开关 0.9.3 新增 | 普通的选项卡片上没有。带有可取多个值字段的表单可以多选 |
| 问题等待时长 | 8 小时 | 2 小时 |
| 🖥️ Inspect tmux console | 显示 worker 的日志,而不是 Copilot 界面 | 显示实时的 Copilot 终端(Linux 和 macOS,需要 tmux) |
| 智能体工具 | relay_ 是一个工具;对于 preview,智能体会被告知如何调用中继的预览 API |
relay_ 和 preview 通过 OAR 的 MCP 服务器提供 |
| 中继模式 | 原生的 plan 和 autopilot 模式;plan 拒绝任何非只读操作,ask 在每个此类操作之前询问 | 仅为提示词中的指示 |
| 压缩 | 运行时在上下文窗口达到 80% 时在后台压缩,达到 95% 时阻塞 | OAR 不设置也不显示任何内容 |
| 卡住轮次监视 | 静默 120 秒后判定一轮失败,模型请求期间为 300 秒,工具运行期间为 30 分钟 | 一轮最长 2 小时;中继认为 CLI 离线期间有 45 秒的不活动窗口 |
| 用量 | 在 Check Usage 的 Copilot 卡片中添加 Last SDK worker turn(SDK worker 的上一轮) | 只有卡片的账户计量 |
两种引擎显示相同的对话记录、提问卡片、计划看板、模型列表和每条回复的用量行。Steer、Queue(加入队列)和卡住轮次的时间窗口见轮次与队列,上表相应各行见中继模式和压缩,提问卡片见 ask_user。
在 SDK 引擎上,Stop 只结束回复。该轮启动的后台智能体会继续运行,在任务面板中各有自己的 Stop。
选择引擎 #
该选择是整个中继的一项设置:Settings → Providers → Copilot → Copilot engine(设置 → 提供商 → Copilot → Copilot 引擎),选项为 Extension(扩展)和 SDK — default(SDK — 默认)。更改后按 Save Copilot settings(保存 Copilot 设置)。
- 它适用于之后才启动 worker 的对话。已经在运行的会话会保留它的引擎,直到其 worker 重启。
- 如果没有人保存过选择,中继会在能用 SDK 时使用 SDK,不能用时使用 Extension。你保存的选择始终优先。这也包括已保存的 SDK:如果之后某次重启不再找到 CLI,中继不会自行切换回去,新对话的 worker 也无法启动,直到再次找到 CLI 或你保存 Extension。
- 面板会说明设置的是哪种引擎:New Copilot conversations run on the headless SDK worker. No tmux inspector for these sessions. 或 New Copilot conversations run on the Copilot CLI with the web-relay extension.
要判断正在运行的对话使用哪种引擎,请查看它的输入区和 tmux 控制台。一轮期间,发送按钮在 SDK 引擎上显示 Steer(当提问卡片或审批打开、该轮正在压缩或有工具调用正在运行时,显示 Queue),在扩展引擎上始终显示 Queue。tmux 控制台只在扩展引擎上显示 Copilot 界面。对话本身不带引擎标签。
保存 SDK 被拒绝时 #
当中继无法运行 SDK 时,它会拒绝保存,并在引擎说明的位置显示原因。已存储的设置不会改变,选择框会回到中继实际运行的引擎。
| 消息开头 | 怎么办 |
|---|---|
| The Copilot SDK was not found when the relay started (COPILOT_SDK_PATH did not resolve) | 中继没有找到 Copilot CLI 运行时。安装或升级 CLI,运行一次 copilot,然后重启中继。见 OAR 如何找到 CLI。 |
| The SDK engine requires session worker routing, which is disabled on this relay (SESSION_WORKER_ROUTING_ENABLED) | 在 Settings → Features(设置 → 功能)中重新开启 Session worker routing(会话 worker 路由)(默认开启),然后重启中继。 |
设置 #
在 Settings → Providers → Copilot 下:
| 控件 | 默认值 | 作用 |
|---|---|---|
| GitHub Copilot CLI | 一个状态行。只读:你在中继主机上用 npm 管理此 CLI。 | |
| Copilot engine | SDK | 用哪种引擎运行新的 Copilot 对话。见选择引擎。 |
| Save Copilot settings | 保存引擎。 |
其他影响 Copilot 会话的设置位于别处:
| 设置 | 默认值 | 对 Copilot 的影响 |
|---|---|---|
| Settings → General → Background task timeout(设置 → 常规 → 后台任务超时) | 4 小时 | 回复之后,仅剩后台智能体和分离的 shell 时,它们还能让会话保持运行多长时间。之后它们会被停止。0 表示没有上限;最大值为 10 小时。 |
| Settings → General → Max turn duration(设置 → 常规 → 单轮最长时长) | 60 分钟 | 一轮在中继将其重新排队之前最长可以运行的时间。 |
| Settings → Features → Session worker routing | 开启 | SDK 引擎需要它。更改在中继重启后生效。 |
模型 #
中继在启动几秒后从已安装的 Copilot CLI 运行时读取模型列表。每个模型显示运行时所报告的推理强度和上下文窗口。列表以 auto 开头,然后按厂商分组(OpenAI、Anthropic、Google、xAI、Microsoft、Azure OpenAI、Moonshot AI,然后其他厂商按字母顺序),最新版本排在前面。
在第一次发现之前,新的中继提供 gpt-、gpt-(默认)、gpt-、claude- 和 claude-。
在对话的 ⋯ 菜单中使用 🤗 Select Models → Copilot(选择模型 → Copilot)选择哪些模型出现在输入区中,然后按 💾 Save enabled models(保存已启用的模型)。Refresh(刷新)会重新读取列表。如果列表看起来过时,请按 Refresh。
用量 #
- 在回复下方,Copilot 的一轮会显示它的用量:
+N表示额度,括号中是占你每月套餐的比例,以及month N% left。stale标签表示该轮的数字无法刷新。只有 Copilot 的轮次才有这一行;其他提供商(包括 OpenAI)不使用 Copilot 额度。 - 在标题栏中,会话行会汇总整个对话,例如
Session: 1.。25 AIC used - 在 Check Usage 中,在
⋯菜单中打开 📊 Check Usage 并选择 Copilot 选项卡,查看实时配额(AI 额度或高级请求、对话和套餐)。在 SDK 引擎上,它会添加 Last SDK worker turn:该轮实际花费的额度、它的 token 和模型调用。这些是单轮的数字,不是累计总数,并且该部分会在七天后消失。
Copilot 卡片通过 gh 读取你的账户。如果你不使用 gh,请在中继的环境中设置 GH_ 或 GITHUB_。
导入你已有的会话 #
中继启动时会导入主机上存储的 Copilot 会话,使它们连同历史记录出现在你的列表中。它通过已安装的 Copilot 运行时读取这些会话。如果运行时不可用,导入会报告为失败。中继不会根据文件进行猜测。
删除这样的会话只会隐藏它:Copilot CLI 自己的会话会保留,因为中继从未运行过它。
环境变量 #
在中继进程的环境中设置这些变量,然后重启中继。
| 变量 | 作用 |
|---|---|
COPILOT_ |
Copilot CLI 运行时的 copilot- 目录,取代包缓存中最新的那个 |
COPILOT_ |
一个额外的包缓存,用于搜索运行时 |
GH_、GITHUB_ |
供 Check Usage 中 Copilot 卡片使用的 GitHub 令牌,取代 gh auth token |
OAR_ |
不把 OAR 的 MCP 服务器连接到扩展引擎;它会以文本形式收到预览说明,并且没有 relay_ 工具 |
COPILOT_ |
将 Session worker routing 固定为关闭,这会使 SDK 引擎不可用 |
限制 #
- 中继需要重启,才能发现在它启动后安装或升级的 Copilot CLI。
- 在 SDK 引擎上没有可以连接的终端。
- 在扩展引擎上,一轮期间的消息会排队;它们无法引导。
- 在 SDK 引擎上,中继判定一轮失败之前,会给它 2 分钟无任何运行的静默时间,模型请求期间 5 分钟,工具运行期间 30 分钟。等待提问卡片的一轮永远不会被视为卡住。这些时间窗口见轮次与队列。
- 使用你自己密钥的 OpenAI 对话也使用这些引擎,但花费的是你的密钥,因此它的轮次不带 Copilot 用量行。
无法正常工作时 #
| 发生了什么 | 原因与解决方法 |
|---|---|
| Copilot 无法启动,或 SDK 引擎因 COPILOT_SDK_PATH did not resolve(COPILOT_SDK_PATH 无法解析)被拒绝 | 启动时没有找到 Copilot CLI 运行时。安装或升级 CLI,运行一次 copilot,重启中继。 |
| 在 SDK 引擎上,回复说 Copilot 运行时无法认证 | 在中继主机上运行 copilot 并登录,然后重新发送消息。 |
| 你想要 SDK,新对话却运行在 Extension 上 | 没有人保存过选择且中继无法运行 SDK,或者你保存的是 Extension。把 Copilot engine 设为 SDK 并保存;如果有原因,拒绝消息会指出它。 |
| 正在运行的对话没有切换引擎 | 引擎在其 worker 启动时读取。⋯ 菜单中的 ☠️ Kill session(强制结束会话)会停止 worker;下一条消息会在当前引擎上启动它。 |
| 回复说 GitHub Copilot 在此计费周期内没有剩余的 AI 额度 | 套餐已用完。打开 Check Usage 查看重置时间并在之后重试,或把对话切换到另一个提供商。中继不会对此重试。 |
oar copilot 说缺少 GitHub CLI |
它运行的是 gh copilot。安装 GitHub CLI,或只运行中继。 |
| 模型列表过时或有误 | 🤗 Select Models → Refresh。 |
| 回复下方没有用量行 | 只有 Copilot 的轮次会记录它。 |
| 🖥️ Inspect tmux console 显示的是日志行,而不是 Copilot 界面 | 该对话运行在 SDK 引擎上。 |