# Запуск среды выполнения Copilot в процессе

Размещение в процессе загружает собственную среду выполнения Copilot в процесс приложения, а не запускает отдельный процесс Copilot CLI. Используйте его для удаления управления дочерними процессами при сохранении одинаковых сеансов пакета SDK Copilot, событий, инструментов, перехватчиков и JSON-RPC поведения.

<!-- markdownlint-disable GHD046 GHD005 -->

<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->

> \[!WARNING]
> Размещение в процессе является экспериментальным в каждом пакете SDK. Тестирование поведения запуска, запуска, модели и завершения работы в каждой развернутой операционной системе и архитектуре.

## Когда следует использовать внутрипроцессное размещение

Размещение в процессе хорошо подходит, когда:

* Приложение должно выполняться без отдельного процесса выполнения.
* Вы хотите, чтобы пакет SDK владел жизненным циклом среды выполнения.
* Вы можете отправить собственную библиотеку для каждой платформы развертывания.
* Допустимые параметры среды и рабочего каталога.

Используйте [Настройка по умолчанию (в комплекте CLI)](/ru/copilot/how-tos/copilot-sdk/setup/bundled-cli) , если изоляция процесса и наиболее установленный путь развертывания являются более важными. Используйте [Настройка серверных сервисов](/ru/copilot/how-tos/copilot-sdk/setup/backend-services) , если несколько экземпляров приложений должны подключаться к общей среде выполнения через TCP.

## Принцип работы

Пакет SDK загружает собственную библиотеку среды выполнения Copilot и привязывает фиксированный ABI C. Все методы ПАКЕТА SDK продолжают использовать существующий `Content-Length`JSON-RPC протокол JSON-RPC через подключение в памяти.

![Диаграмма: блок-схема, показывающая описанный процесс.](/assets/images/help/copilot/copilot-sdk/setup-in-process-runtime-diagram-0.png)

Среда выполнения:

* Выполняется в процессе приложения без Node.js, дочернего процесса, TCP-порта или маркера подключения.
* Поддерживает те же сеансы, потоковые события, средства, перехватчики, разрешения и запросы между клиентами, что и другие транспорты.
* Может вызывать обратные вызовы пакета SDK из собственных рабочих потоков. Пакет SDK обрабатывает маршалирование потоков и время существования обратного вызова.
* Сохраняет загруженную собственную библиотеку и его рабочий пул доступны в течение всего времени существования процесса приложения.

## Требования к пакету SDK

Все пакеты SDK предоставляют явный параметр подключения в процессе. Для некоторых языков требуется дополнительная конфигурация сборки или пакета.

| SDK                                          | Параметр подключения                | Дополнительное требование                                                                                                               |
| -------------------------------------------- | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| TypeScript                                   | `RuntimeConnection.forInProcess()`  | Нет, если пакет включает совместимый пакет среды выполнения                                                                             |
| Python                                       | `RuntimeConnection.for_inprocess()` | Предварительная загрузка при `python -m copilot download-runtime --in-process` недоступности загрузки среды выполнения во время запуска |
| Go                                           | `copilot.InProcessConnection{}`     | Сборка с помощью `-tags copilot_inprocess`                                                                                              |
| .NET                                         | `RuntimeConnection.ForInProcess()`  | Разрешить диагностику экспериментального `GHCP001` API                                                                                  |
| Rust                                         | `Transport::InProcess`              |                                                                                                                                         |
| `bundled-in-process` Включение функции Cargo |                                     |                                                                                                                                         |
| Java                                         | `RuntimeConnection.forInProcess()`  | Добавление JNA, классификатора среды выполнения платформы и экспериментального использования API                                        |

Собственный пакет среды выполнения должен соответствовать операционной системе узла, архитектуре ЦП и библиотеке Linux, C. Неподдерживаемые узлы завершаются ошибкой во время разрешения среды выполнения или запуска вместо возврата к дочернему процессу.

## Настройка подключения в процессе

Передайте параметр подключения для конкретного языка при создании клиента.

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

<!-- docs-validate: skip -->

```typescript
import { CopilotClient, RuntimeConnection } from "@github/copilot-sdk";

const client = new CopilotClient({
  connection: RuntimeConnection.forInProcess(),
});

await client.start();
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

<!-- docs-validate: skip -->

```python
from copilot import CopilotClient, RuntimeConnection

client = CopilotClient(
    connection=RuntimeConnection.for_inprocess(),
)

await client.start()
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

<!-- docs-validate: skip -->

```golang
client := copilot.NewClient(&copilot.ClientOptions{
    Connection: copilot.InProcessConnection{},
})

if err := client.Start(context.Background()); err != nil {
    log.Fatal(err)
}
defer client.Stop()
```

</div>

<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

<!-- docs-validate: skip -->

```csharp
#pragma warning disable GHCP001

var client = new CopilotClient(new CopilotClientOptions
{
    Connection = RuntimeConnection.ForInProcess(),
});

await client.StartAsync();
```

</div>

<div class="ghd-codetab" data-lang="rust" data-label="Rust"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Rust</div>

<!-- docs-validate: skip -->

```rust
let options = ClientOptions::default()
    .with_transport(Transport::InProcess);

let client = Client::start(options).await?;
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

<!-- docs-validate: skip -->

```java
import com.github.copilot.AllowCopilotExperimental;

@AllowCopilotExperimental
public class Example {
    public void run() throws Exception {
        CopilotClientOptions options = new CopilotClientOptions()
            .setConnection(RuntimeConnection.forInProcess());

        CopilotClient client = new CopilotClient(options);
        client.start().join();
    }
}
```

`RuntimeConnection.forInProcess()` is `@CopilotExperimental`, поэтому потребляемый класс или метод должен принять участие `@AllowCopilotExperimental` (или скомпилировать с `-Acopilot.experimental.allowed=true`). См. статью ["Использование экспериментальных API](https://github.com/github/copilot-sdk/tree/main/java/README.md#using-experimental-apis)".

</div>

</div>

Вы также можете задать `COPILOT_SDK_DEFAULT_CONNECTION=inprocess` перед запуском приложения. Пакет SDK использует это значение только в том случае, если клиент не указывает явное подключение. Недопустимое значение приводит к сбою запуска.

Предпочитайте явную конфигурацию клиента в коде приложения. Используйте переменную среды, если конфигурация развертывания должна выбрать транспорт без изменения приложения.

## Настройка среды выполнения

Пакет SDK преобразует поддерживаемые типизированные параметры клиента в собственные аргументы среды выполнения и значения среды с областью узла. В зависимости от пакета SDK эти параметры включают:

* Маркер проверки подлинности и резервный вариант входа в систему.
* Copilot базовый каталог.
* Уровень журнала.
* Время ожидания простоя сеанса.
* Режим удаленного сеанса.

Среда выполнения в процессе получает моментальный снимок среды узла, а также поддерживаемые переопределения, управляемые пакетом SDK. Он не изменяет среду узла.

Задайте значения на уровне процесса перед созданием первого внутрипроцессного клиента. К ним относятся переменные среды, которые не представлены типизированными параметрами клиента и текущим рабочим каталогом приложения.

## Разрешение библиотеки среды выполнения

Каждый пакет SDK сначала ищет совместимую или кэшированную библиотеку среды выполнения. Вы можете задать `COPILOT_CLI_PATH` указатель на совместимый пакет среды выполнения Copilot, если необходимо предоставить среду выполнения отдельно.

В процессе обычно загружается только один путь к библиотеке собственной среды выполнения и версия. Запуск другого клиента с той же загруженной библиотекой поддерживается, но попытка загрузить другую библиотеку среды выполнения завершается ошибкой.

Для рабочих развертываний:

1. Создание и тестирование приложения для каждой целевой платформы.
2. Убедитесь, что соответствующий собственный артефакт среды выполнения включен в развернутый пакет или доступен с помощью механизма загрузки среды выполнения пакета SDK.
3. Запустите по крайней мере один сеанс и завершите поворот модели в тестовом режиме развертывания.
4. Перед завершением работы приложения остановите клиентов.

## Поведение жизненного цикла

Запуск внутрипроцессного клиента загружает собственную библиотеку, создает узел среды выполнения, открывает подключение в памяти и выполняет нормальное подтверждение версии протокола SDK.

Во время корректного завершения работы пакет SDK:

1. Закрывает активные сеансы.
2. Запрашивает обычное завершение работы среды выполнения через JSON-RPC.
3. Закрывает JSON-RPC и собственные подключения.
4. Освобождает узел среды выполнения.

Собственная библиотека может оставаться загруженной до завершения процесса приложения. Не зависят от выгрузки и замены библиотеки среды выполнения после первого использования.

## Limitations

В процессе размещения имеются следующие текущие ограничения:

* **Экспериментальный API**: требования к поведению и упаковке могут меняться между выпусками.
* **Состояние общего процесса**: все клиенты совместно используют среду процесса узла, текущий рабочий каталог, собственную библиотеку и рабочий пул среды выполнения.
* **Варианты ограниченного процесса: параметры** пакета SDK для произвольной среды, рабочего каталога, конфигурации телеметрии, пути исполняемого файла или аргументы CLI отклоняются, если это применимо. Настройте глобальные значения процесса в хост-процессе и используйте поддерживаемые типизированные параметры для параметров среды выполнения.
* **Нет рабочего каталога для каждого клиента**: среда выполнения использует рабочий каталог процесса размещения.
* **Одна версия среды выполнения для каждого процесса**: загрузка другого пути к собственной библиотеке или версии не поддерживается.
* **Степень зрелости платформы зависит от того**, что некоторые сочетания пакетов SDK и платформы снижают уровень охвата модели или завершения работы. Проверьте точное сочетание развернутых данных.

## Дополнительные материалы

* [Руководства по настройке](/ru/copilot/how-tos/copilot-sdk/setup/choosing-a-setup-path): сравнение размещения в процессе с другими моделями развертывания
* [Настройка по умолчанию (в комплекте CLI)](/ru/copilot/how-tos/copilot-sdk/setup/bundled-cli): запуск пакетной среды выполнения в управляемом дочернем процессе
* [Настройка серверных сервисов](/ru/copilot/how-tos/copilot-sdk/setup/backend-services): подключение приложений к общей среде выполнения через TCP
* [Крючки жизненного цикла сессии](/ru/copilot/how-tos/copilot-sdk/hooks/session-lifecycle): обработка событий начала и завершения сеанса