Skip to main content

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

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

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

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

Примечание.

          Второй пилот SDK в настоящее время находится в public preview. Функциональность и доступность могут меняться.
          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);