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 的 runtime,看不到之後才安裝的版本。
- 已登入的 GitHub CLI(
gh),供oar copilot、Windows 上的 擴充功能引擎 session,以及 Check Usage(檢查用量)中的 Copilot 卡片使用。 - tmux(選用,Linux 和 macOS),如果你想用 🖥️ Inspect tmux console(檢視 tmux 主控台)觀看 session 的終端機。
中繼不會安裝或更新 Copilot CLI。在 Settings → Providers → Copilot(設定 → 供應商 → Copilot)中,頂端的 GitHub Copilot CLI 列只會回報它的狀態。
OAR 如何找到 CLI #
SDK 引擎驅動的是 Copilot CLI 隨附的 runtime。啟動時,中繼會在 CLI 的套件快取中尋找,並採用其中最新的版本:
| 系統 | 資料夾 |
|---|---|
| Linux | ~/. 和 ~/. |
| macOS | ~/ |
| Windows | %LOCALAPPDATA%\ |
在 Linux 上,如果你設定了 XDG_ 和 XDG_,這兩個資料夾會隨之改變。設定 COPILOT_ 可以增加一個要搜尋的資料夾,設定 COPILOT_ 則可以直接指定 runtime 的 copilot- 目錄。如果什麼都找不到,就無法使用 SDK 引擎(見選擇引擎)。
使用 oar copilot #
如果中繼的連接埠上沒有任何回應,oar copilot 會先在背景啟動中繼,然後在你的 shell 中開啟 Copilot CLI(gh copilot)。由它啟動的中繼會在 session 結束時再次停止。-- 之後的引數會傳給 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 隨附的 runtime | 終端機 session 中的 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) |
| Agent 工具 | relay_ 是一個工具;至於 preview,agent 會被告知如何呼叫中繼的 preview API |
relay_ 和 preview 透過 OAR 的 MCP 伺服器提供 |
| 中繼模式 | 原生的 plan 和 autopilot 模式;plan 會拒絕任何非唯讀的動作,ask 會在每個這類動作前詢問 | 只是提示中的指令 |
| 壓縮 | runtime 在上下文視窗用到 80% 時於背景壓縮,到 95% 時會阻擋 | OAR 不設定也不顯示 |
| 卡住回合監看 | 靜默 120 秒、模型請求期間 300 秒、工具執行期間 30 分鐘後讓回合失敗 | 回合以 2 小時為限;中繼判定 CLI 離線時有 45 秒的無活動時間窗 |
| 用量 | 在 Check Usage 的 Copilot 卡片中加上 Last SDK worker turn(SDK worker 的上一回合) | 只有卡片上的帳戶用量計 |
兩種引擎顯示相同的對話紀錄、提問卡片、計畫看板、模型清單和每則回覆的用量行。Steer、Queue(加入佇列)和卡住回合的時間窗見回合與佇列;那幾列的說明見中繼模式和壓縮;提問卡片見 ask_user。
在 SDK 引擎上,Stop 只會結束回覆。回合啟動的背景 agent 會繼續執行,並在任務面板中各有自己的 Stop。
選擇引擎 #
這是整個中繼共用的一個設定:Settings → Providers → Copilot → Copilot engine(設定 → 供應商 → Copilot → Copilot 引擎),選項有 Extension(擴充功能)和 SDK — default(SDK — 預設)。變更後請按 Save Copilot settings(儲存 Copilot 設定)。
- 設定會套用到之後才啟動 worker 的對話。已在執行的 session 會保留原本的引擎,直到它的 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 的 runtime。請安裝或升級 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(Session worker 路由)(預設為開啟),然後重新啟動中繼。 |
設定 #
在 Settings → Providers → Copilot 下:
| 控制項 | 預設 | 作用 |
|---|---|---|
| GitHub Copilot CLI | 狀態列。唯讀:這個 CLI 由你在中繼主機上用 npm 管理。 | |
| Copilot engine(Copilot 引擎) | SDK | 由哪種引擎執行新的 Copilot 對話。見選擇引擎。 |
| Save Copilot settings | 儲存引擎設定。 |
其他會影響 Copilot session 的設定在別處:
| 設定 | 預設 | 對 Copilot 的影響 |
|---|---|---|
| Settings → General → Background task timeout(設定 → 一般 → 背景任務逾時) | 4 小時 | 回覆結束後,僅剩背景 agent 和分離的 shell 時,session 還能繼續執行多久。時間到就會停止它們。0 表示沒有上限;最大值是 10 小時。 |
| Settings → General → Max turn duration(設定 → 一般 → 回合最長時間) | 60 分鐘 | 一個回合在中繼將它重新排入佇列之前,最多能執行多久。 |
| Settings → Features → Session worker routing(設定 → 功能 → Session worker 路由) | 開啟 | SDK 引擎需要它。變更在中繼重新啟動後生效。 |
模型 #
中繼啟動幾秒後,會從已安裝的 Copilot CLI runtime 讀取模型清單。每個模型都會顯示 runtime 回報的 reasoning effort 等級和上下文視窗。清單以 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 行會加總整個對話的用量,例如
Session: 1.。25 AIC used - 在 Check Usage 中,從
⋯選單開啟 📊 Check Usage,選擇 Copilot 分頁即可查看即時配額(AI 點數或進階請求、對話和方案)。在 SDK 引擎上,它會加上 Last SDK worker turn:該回合實際花費的點數、token 和模型呼叫次數。這些是單一回合的數字,不是累計總數,這個區塊會在七天後消失。
Copilot 卡片透過 gh 讀取你的帳戶。如果你不使用 gh,請在中繼的環境中設定 GH_ 或 GITHUB_。
匯入你已有的 session #
中繼啟動時,會匯入主機上儲存的 Copilot session,讓它們連同歷史記錄出現在你的清單中。它透過已安裝的 Copilot runtime 讀取這些 session。如果無法使用 runtime,匯入會回報失敗。中繼不會從檔案自行推測。
刪除這類 session 只會把它隱藏起來:Copilot CLI 自己的 session 仍會保留,因為它從來不是由中繼執行的。
環境變數 #
在中繼處理程序的環境中設定這些變數,然後重新啟動中繼。
| 變數 | 作用 |
|---|---|
COPILOT_ |
Copilot CLI runtime 的 copilot- 目錄,取代套件快取中最新的那一個 |
COPILOT_ |
額外一個用來搜尋 runtime 的套件快取 |
GH_、GITHUB_ |
供 Check Usage 中 Copilot 卡片使用的 GitHub token,取代 gh auth token |
OAR_ |
不把 OAR 的 MCP 伺服器附加到 擴充功能引擎;它會以文字形式取得 preview 的說明,而且沒有 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 的 runtime。請安裝或升級 CLI,執行一次 copilot,然後重新啟動中繼。 |
| 在 SDK 引擎上,回覆說 Copilot runtime 無法驗證身分 | 在中繼主機上執行 copilot 並登入,然後重新傳送訊息。 |
| 你想用 SDK,新對話卻在 Extension 上執行 | 沒有人儲存過選擇而中繼無法執行 SDK,或是你儲存的是 Extension。把 Copilot engine 設為 SDK 並儲存;如果有原因,拒絕訊息會指出來。 |
| 執行中的對話沒有更換引擎 | 引擎是在 worker 啟動時讀取的。⋯ 選單中的 ☠️ Kill session(強制結束 session)會停止 worker;下一則訊息會以目前的引擎重新啟動它。 |
| 回覆說 GitHub Copilot 在這個計費時段已沒有 AI 點數 | 方案額度已用完。開啟 Check Usage 查看重設時間,等重設後再試,或把對話改用其他供應商。中繼不會自動重試這種情況。 |
oar copilot 說缺少 GitHub CLI |
它執行的是 gh copilot。請安裝 GitHub CLI,或只執行中繼。 |
| 模型清單過時或不正確 | 🤗 Select Models → Refresh(選擇模型 → 重新整理)。 |
| 回覆下方沒有用量行 | 只有 Copilot 回合會記錄用量行。 |
| 🖥️ Inspect tmux console 顯示的是記錄行,而不是 Copilot 畫面 | 這個對話是在 SDK 引擎上執行。 |
agent session、中繼模式和其他與引擎無關的行為,都依 session 和 agent 協作相關頁面的說明運作。