Skip to main content

Совместимость SDK и CLI

Сравните, какие Copilot функции CLI доступны, Второй пилот SDKопределите функции только для CLI и найдите программные обходные пути.

Кто может использовать эту функцию?

GitHub Copilot SDK Доступна со всеми Copilot тарифными планами.

Примечание.

Второй пилот 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
    
  • Используйте CLI напрямую для одноразового экспорта.

Контроль разрешений

SDK использует модель отказов по умолчанию. Все запросы на разрешения (запись файлов, команды shell, получение URL и другие) отклоняются, если только ваше приложение не предоставляет обработчик onPermissionRequest .

Вместо --allow-all-paths или --yolo, используйте обработчик разрешений:

TypeScript
const session = await client.createSession({
  onPermissionRequest: approveAll,
});

Отслеживание использования токенов

Вместо /usage, подписывайтесь на события использования:

TypeScript
session.on("assistant.usage", (event) => {
  console.log("Tokens used:", {
    input: event.data.inputTokens,
    output: event.data.outputTokens,
  });
});

Уплотнение контекста

Вместо /compactэтого настройте автоматическое уплотнение или активируйте её вручную:

TypeScript
// 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), а не абсолютное количество токенов.

Управление планами

Программно читайте и пишите планы сессий:

TypeScript
// 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 без прерывания:

TypeScript
// 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 — без изменений кода.

Вы можете проверить версии во время выполнения:

TypeScript
const status = await client.getStatus();
console.log("Protocol version:", status.protocolVersion);