Примечание.
Второй пилот SDK в настоящее время находится в Публичный предварительный просмотр. Функциональность и доступность могут меняться.
GitHub Copilot SDK Общается с GitHub Copilot CLI JSON-RPC протоколом. Функции должны быть явно раскрыты через этот протокол, чтобы быть доступными в SDK. Многие интерактивные функции CLI специфичны для терминала и недоступны программно.
Сравнение функций
Доступно в формате SDK
| Функция | Метод SDK | Примечания |
|---|---|---|
| Управление сеансами | ||
| Создание сеанса | createSession() | Полная поддержка конфигурации |
| Сессия резюме | resumeSession() | С бесконечными сессионными рабочими пространствами |
| Завершить сеанс. | disconnect() | Выпуск ресурсов в памяти |
| Сессия уничтожения | destroy() | Вместо нее следует использовать disconnect(). |
| Удаление сеанса | deleteSession() | Извлечение из хранения |
| Перечисление сеансов | listSessions() | Все сохранённые сессии |
| Получите последнюю сессию | getLastSessionId() | Краткое резюме |
| Сессия на переднем плане | getForegroundSessionId() | Многосессионная координация |
| Задайте сессию на переднем плане | setForegroundSessionId() | Многосессионная координация |
| Сообщения | ||
| Отправить сообщение | send() | С приложениями |
| Отправь и жди | sendAndWait() | Блоки до завершения |
| Рулевое управление (режим мгновенности) | send({ mode: "immediate" }) | Ввод в середине поворота без прекращения |
| Очередь (режим очереди) | send({ mode: "enqueue" }) | Буфер для последовательной обработки (по умолчанию) |
| Вложенные файлы | send({ attachments: [{ type: "file", path }] }) | Изображения автоматически кодируются и изменяются в размере |
| Вложения в каталог | send({ attachments: [{ type: "directory", path }] }) | Прикрепить контекст каталога |
| Узнать историю | getMessages() | Все сессионные мероприятия |
| Отмена | abort() | Отменить запрос на борт |
| Инструменты | ||
| Регистрируйте пользовательские инструменты | registerTools() | Полная поддержка JSON Schema |
| Контроль прав на инструмент | ||
onPreToolUse Крюк | Разрешить/отрицать/просить | |
| Модификация результатов инструмента | ||
onPostToolUse Крюк | Результаты преобразования | |
| Доступные/исключённые инструменты | ||
availableTools, excludedTools config | Инструменты фильтрации | |
| Модели | ||
| Перечисление моделей | listModels() | С возможностями, биллингом, политикой |
| Модель множества (на момент создания) | ||
model Конфигурация в сессии | За сессию | |
| Модель Switch (в середине сессии) | session.setModel() | Также через session.rpc.model.switchTo() |
| Получите актуальную модель | session.rpc.model.getCurrent() | Активная модель запроса |
| Усилия в рассуждениях | ||
reasoningEffort конфигурация | Для поддерживаемых моделей | |
| Режим агента | ||
| Включите текущий режим | session.rpc.mode.get() | Возвращает текущий режим |
| Режим постановки | session.rpc.mode.set() | Переключение между режимами |
| Управление планами | ||
| Читать план | session.rpc.plan.read() | Получайте plan.md контент и путь |
| План обновления | session.rpc.plan.update() | Пишите plan.md контент |
| Удаление плана | session.rpc.plan.delete() | Удалите plan.md |
| Файлы рабочей области | ||
| Список файлов рабочего пространства | session.rpc.workspace.listFiles() | Файлы в рабочем пространстве сессии |
| Читать файл рабочего пространства | session.rpc.workspace.readFile() | Чтение содержимого файла |
| Создать файл рабочего пространства | session.rpc.workspace.createFile() | Создать файл в рабочем пространстве |
| Аутентификация | ||
| Получить статус аутентификации | getAuthStatus() | Проверьте состояние входа |
| Используйте токен | параметр githubToken | Программная аутентификация |
| Связь | ||
| Пинг | client.ping() | Проверка состояния с таймметкой сервера |
| Получить статус сервера | client.getStatus() | Версия протокола и информация о сервере |
| Серверы MCP | ||
| Локальные/stdio серверы | ||
mcpServers конфигурация | Процессы появления | |
| Удалённый HTTP/SSE | ||
mcpServers конфигурация | Подключение к службам | |
| Обработчики | ||
| До использования инструментов | onPreToolUse | Разрешение, изменение args |
| Использование после использования инструмента | onPostToolUse | Изменить результаты |
| Запрос пользователя | onUserPromptSubmitted | Подсказки изменения |
| Начало/окончание сессии | ||
onSessionStart, onSessionEnd | Жизненный цикл с источником/причиной | |
| Обработка ошибок | onErrorOccurred | Индивидуальное обращение |
| События | ||
| Все сессионные мероприятия | ||
on(), once() | 40+ типов мероприятий | |
| Стриминг | streaming: true | События Delta |
| Конфигурация сессии | ||
| Пользовательские агенты | ||
customAgents конфигурация | Определить специализированные агенты | |
| Системное сообщение | ||
systemMessage конфигурация | Дополнение или замена | |
| Настраиваемый поставщик | ||
provider конфигурация | Поддержка BYOK | |
| Бесконечные сессии | ||
infiniteSessions конфигурация | Автоматическое сжатие | |
| Обработчик разрешений | onPermissionRequest | Одобрить/отклонить запросы |
| Обработчик пользовательского ввода | onUserInputRequest | Занимайся ask_user |
| Навыки | ||
skillDirectories конфигурация | Настраиваемые навыки | |
| Навыки инвалидов | ||
disabledSkills конфигурация | Отключите специфические навыки | |
| Каталог конфигураций | ||
configDir конфигурация | Отменить местоположение конфигурации по умолчанию | |
| имя клиента; | ||
clientName конфигурация | Идентифицировать приложение в User-Agent | |
| Рабочий каталог | ||
workingDirectory конфигурация | Set session cwd | |
| экспериментальный | ||
| Управление агентами | session.rpc.agent.* | Списать, выбирать, снимать выбор, получить текущего агента |
| Режим флота | session.rpc.fleet.start() | Параллельное выполнение субагентов |
| Ручное уплотнение | session.rpc.compaction.compact() | Уплотнение по требованию триггера |
Недоступно в SDK (только для CLI)
| Функция | Команда/опция CLI | Причина |
|---|---|---|
| Экспорт сессий | ||
| Экспорт в файл | ||
--share, /share | Не по протоколу | |
| Экспорт в суть | ||
--share-gist, /share gist | Не по протоколу | |
| Интерактивный интерфейс | ||
| Команды слэш | ||
/help, , /clear``/exitи т. д. | Только для терминального интерфейса (TUI) | |
| Диалог с выбором агента | /agent | Интерактивный интерфейс |
| Диалог в режиме дифференциала | /diff | Интерактивный интерфейс |
| Диалог обратной связи | /feedback | Интерактивный интерфейс |
| Выбор тем | /theme | Интерфейс терминала |
| Модель выбора | /model | Интерактивный интерфейс (используйте SDK setModel() ) |
| Копировать в буфер обмена | /copy | Терминально-специфическая |
| Управление контекстом | /context | Интерактивный интерфейс |
| Исследования и история | ||
| Глубокое исследование | /research | Рабочий процесс TUI с веб-поиском |
| Инструменты истории сессий | /chronicle | Стендап, советы, улучшение, переиндексация |
| Возможности терминала | ||
| Цветовой выход | --no-color | Терминально-специфическая |
| Режим экранного читателя | --screen-reader | Доступность |
| Рендеринг с богатыми дифференциальными элементами | --plain-diff | Терминальный рендеринг |
| Стартап-баннер | --banner | Визуальный элемент |
| Альтернативный буфер экрана | ||
--alt-screen, --no-alt-screen | Терминальный рендеринг | |
| Поддержка мыши | ||
--mouse, --no-mouse | Терминальный вход | |
| Ярлыки пути/разрешения | ||
| Разрешить все пути | --allow-all-paths | Используйте обработчик прав |
| Разрешить все URL | --allow-all-urls | Используйте обработчик прав |
| Разрешить все права | ||
--yolo, , --allow-all``/allow-all | Используйте обработчик прав | |
| Разрешения гранулированных инструментов | ||
--allow-tool, --deny-tool | Используйте onPreToolUse крючок | |
| Контроль доступа к URL | ||
--allow-url, --deny-url | Используйте обработчик прав | |
| Инструменты, разрешённые для сброса, | /reset-allowed-tools | Командование TUI |
| Управление каталогами | ||
| Добавить каталог | ||
/add-dir, --add-dir | Настройка в сессии | |
| Каталоги списков | /list-dirs | Командование TUI |
| Каталог изменений | /cwd | Командование TUI |
| Управление плагинами/MCP | ||
| Команды плагинов | /plugin | Интерактивное управление |
| Управление сервером MCP | /mcp | Интерактивный интерфейс |
| Управление учетными записями | ||
| Поток входа | ||
/login, copilot auth login | Поток устройств OAuth | |
| Выход | ||
/logout, copilot auth logout | Прямой CLI | |
| Сведения о пользователе | /user | Командование TUI |
| Сессионная деятельность | ||
| Ясный разговор | /clear | Только для TUI |
| Вид плана | /plan | Только для TUI (используйте SDK session.rpc.plan.* ) |
| Управление сеансами | ||
/session, , /resume``/rename | Рабочий процесс TUI | |
| Режим флота (интерактивный) | /fleet | Только для TUI (используйте SDK session.rpc.fleet.start() ) |
| Управление навыками | ||
| Управление навыками | /skills | Интерактивный интерфейс |
| Управление задачами | ||
| Просмотр фоновых задач | /tasks | Командование TUI |
| Использование и статистика | ||
| Использование токенов | /usage | Подписывайтесь на события использования |
| Проверка кода | ||
| Проверить изменения | /review | Командование TUI |
| Делегирование | ||
| Делегат в PR | /delegate | Рабочий процесс TUI |
| Настройка терминала | ||
| Интеграция оболочки | /terminal-setup | Специфичная для раковины |
| Развитие | ||
| Экспериментальный переключатель | ||
/experimental, --experimental | Флаг во время выполнения | |
| Управление пользовательскими инструкциями | --no-custom-instructions | Флаг CLI |
| Сеанс диагностики | /diagnose | Командование TUI |
| Просмотр/управление инструкциями | /instructions | Командование TUI |
| Сбор отладочных журналов | /collect-debug-logs | Средство диагностики |
| Reindex workspace | /reindex | Командование TUI |
| Интеграция с IDE | /ide | Рабочий процесс, специфичный для IDE, |
| Неинтерактивный режим | ||
| Режим подсказки | ||
-p, --prompt | Одноразовая казнь | |
| Интерактивный запрос | ||
-i, --interactive | Автоматическое выполнение, затем интерактивное | |
| Бесшумный выход | ||
-s, --silent | Удобно для сценария | |
| Продолжить сессию | --continue | Резюме — последнее |
| Выбор агента | --agent <agent> | Флаг CLI |
Обходные пути
Экспорт сессий
Эта --share опция недоступна через SDK. Чтобы решить эту проблему, сделайте следующее:
-
Собирайте события вручную: Подпишитесь на события сессий и создайте собственный экспорт:
TypeScript const events: SessionEvent[] = []; session.on((event) => events.push(event)); // ... after conversation ... const messages = await session.getMessages(); // Format as markdown yourself
const events: SessionEvent[] = []; session.on((event) => events.push(event)); // ... after conversation ... const messages = await session.getMessages(); // Format as markdown yourself -
Используйте CLI напрямую для одноразового экспорта.
Контроль разрешений
SDK использует модель отказов по умолчанию. Все запросы на разрешения (запись файлов, команды shell, получение URL и другие) отклоняются, если только ваше приложение не предоставляет обработчик onPermissionRequest .
Вместо --allow-all-paths или --yolo, используйте обработчик разрешений:
const session = await client.createSession({
onPermissionRequest: approveAll,
});
const session = await client.createSession({
onPermissionRequest: approveAll,
});
Отслеживание использования токенов
Вместо /usage, подписывайтесь на события использования:
session.on("assistant.usage", (event) => {
console.log("Tokens used:", {
input: event.data.inputTokens,
output: event.data.outputTokens,
});
});
session.on("assistant.usage", (event) => {
console.log("Tokens used:", {
input: event.data.inputTokens,
output: event.data.outputTokens,
});
});
Уплотнение контекста
Вместо /compactэтого настройте автоматическое уплотнение или активируйте её вручную:
// Automatic compaction via config
const session = await client.createSession({
infiniteSessions: {
enabled: true,
backgroundCompactionThreshold: 0.80, // Start background compaction at 80% context utilization
bufferExhaustionThreshold: 0.95, // Block and compact at 95% context utilization
},
});
// Manual compaction (experimental)
const result = await session.rpc.compaction.compact();
console.log(`Removed ${result.tokensRemoved} tokens, ${result.messagesRemoved} messages`);
// Automatic compaction via config
const session = await client.createSession({
infiniteSessions: {
enabled: true,
backgroundCompactionThreshold: 0.80, // Start background compaction at 80% context utilization
bufferExhaustionThreshold: 0.95, // Block and compact at 95% context utilization
},
});
// Manual compaction (experimental)
const result = await session.rpc.compaction.compact();
console.log(`Removed ${result.tokensRemoved} tokens, ${result.messagesRemoved} messages`);
Примечание.
Пороги — это коэффициенты использования контекста (0,0-1,0), а не абсолютное количество токенов.
Управление планами
Программно читайте и пишите планы сессий:
// Read the current plan
const plan = await session.rpc.plan.read();
if (plan.exists) {
console.log(plan.content);
}
// Update the plan
await session.rpc.plan.update({ content: "# My Plan\n- Step 1\n- Step 2" });
// Delete the plan
await session.rpc.plan.delete();
// Read the current plan
const plan = await session.rpc.plan.read();
if (plan.exists) {
console.log(plan.content);
}
// Update the plan
await session.rpc.plan.update({ content: "# My Plan\n- Step 1\n- Step 2" });
// Delete the plan
await session.rpc.plan.delete();
Управление сообщениями
Введите сообщение в текущий ход LLM без прерывания:
// Steer the agent mid-turn
await session.send({ prompt: "Focus on error handling first", mode: "immediate" });
// Default: enqueue for next turn
await session.send({ prompt: "Next, add tests" });
// Steer the agent mid-turn
await session.send({ prompt: "Focus on error handling first", mode: "immediate" });
// Default: enqueue for next turn
await session.send({ prompt: "Next, add tests" });
Ограничения протокола
SDK может получать доступ только к функциям, открытым через протокол JSON-RPC CLI. Если вам нужна функция CLI, которая недоступна:
- Проверьте альтернативы: Многие функции имеют аналоги SDK (см. выше раздел обходных путей ).
- Используйте CLI напрямую: Для единичных операций используйте CLI.
- Запросить функцию: Откройте проблему в репозитории github/copilot-sdk , чтобы запросить поддержку протокола.
Совместимость версий
| Диапазон протокола SDK | Версия протокола CLI | Совместимость |
|---|---|---|
| v2-v3 | версия 3 | Полная поддержка |
| v2-v3 | версия 2 | Поддерживается автоматическими адаптерами v2 |
SDK согласует версии протокола с CLI при запуске. SDK поддерживает версии протокола 2–3. При подключении к серверу CLI v2 SDK автоматически адаптируется tool.call и permission.request сообщает к модели событий v3 — без изменений кода.
Вы можете проверить версии во время выполнения:
const status = await client.getStatus();
console.log("Protocol version:", status.protocolVersion);
const status = await client.getStatus();
console.log("Protocol version:", status.protocolVersion);