> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# TCP-modus

> Leer hoe je met de Laravel Copilot SDK verbinding maakt met een vooraf gestarte Copilot CLI-server voor gedeeld gebruik met lage overhead.

## TCP-modus

Normaal gesproken start de SDK voor elk request een nieuw Copilot CLI-proces (stdio-modus).
Met de TCP-modus kun je verbinding maken met een vooraf gestarte Copilot CLI-server.

## Voordelen van de TCP-modus

* **Betere prestaties**: geen overhead van het starten van processen
* **Gedeelde resources**: meerdere Laravel-processen kunnen dezelfde CLI-server delen
* **Procesbeheer**: kan als achtergrondproces worden beheerd op Laravel Forge / Laravel Cloud
* **Deploy-ondersteuning**: ondersteunt automatisch herstarten bij een deploy

## Gebruik

### 1. Start de Copilot CLI-server

```shell theme={null}
copilot --headless --port 12345
```

### 2. Stel de omgevingsvariabele in

```dotenv theme={null}
COPILOT_URL=tcp://127.0.0.1:12345
# COPILOT_URL=http://127.0.0.1:12345
# COPILOT_URL=127.0.0.1:12345
# COPILOT_URL=12345
# COPILOT_URL=127.0.0.1
# COPILOT_URL=localhost
```

Meer is er niet nodig: de SDK schakelt automatisch over van de stdio-modus naar de TCP-modus.

* `tcp://` is optioneel. Het werkt ook met `http://` of zonder schema.
* Je kunt ook alleen een poort opgeven. De host wordt dan automatisch `127.0.0.1`.
* Alleen een host opgeven werkt uitsluitend met `127.0.0.1` en `localhost`. De poort wordt dan standaard `12345`.

## Configuratiebestand

Je kunt de TCP-verbinding configureren in `config/copilot.php`.

```php theme={null}
return [
    // TCP-verbindings-URL (bij instellen wordt de TCP-modus gebruikt)
    'url' => env('COPILOT_URL'),

    // Het volgende wordt alleen gebruikt in de stdio-modus
    'cli_path' => env('COPILOT_CLI_PATH', 'copilot'),
    'cli_args' => [],
    'cwd' => null,
    'log_level' => env('COPILOT_LOG_LEVEL', 'info'),

    // Gemeenschappelijk voor beide modi
    'timeout' => env('COPILOT_TIMEOUT', 60),
    'model' => env('COPILOT_MODEL'),
];
```

Als je zowel `COPILOT_URL` (`cli_url`) als `COPILOT_CLI_PATH` instelt, krijgt de TCP-modus voorrang.

## Wisselen van modus tijdens runtime

Normaal gesproken wordt op basis van het configuratiebestand automatisch gekozen tussen de TCP-modus en de stdio-modus.
Je kunt ook expliciet wisselen in je code.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

// Overschakelen naar de TCP-modus
$response = Copilot::useTcp(url: 'tcp://127.0.0.1:12345')->run(prompt: 'Hello, TCP mode!');
// Zonder argument wordt de waarde uit het configuratiebestand gebruikt
$response = Copilot::useTcp()->run(prompt: 'Hello, TCP mode!');

// Overschakelen naar de stdio-modus
$stdioConfig = [
    'cli_path' => 'copilot',
    'cli_args' => [],
    'cwd' => base_path(),
    'log_level' => 'info',
];
$response = Copilot::useStdio($stdioConfig)->run(prompt: 'Hello, stdio mode!');

// Zonder argument wordt de waarde uit het configuratiebestand gebruikt
// Als beide modi zijn geconfigureerd heeft TCP voorrang, dus dit is handig om tijdelijk te overschrijven
$response = Copilot::useStdio()->run(prompt: 'Hello, stdio mode!');
```

Op sommige servers werkt de TCP-modus mogelijk niet goed.
Je kunt de modi ook combineren: bijvoorbeeld de TCP-modus voor queue-verwerking en de stdio-modus voor verwerking binnen HTTP-requests.

## Gebruik op Laravel Forge / Laravel Cloud

### Laravel Forge

1. **Maak een Daemon aan**: maak een Daemon aan in het Forge-beheerpaneel.

   ```
   Command: copilot --headless --port 12345
   User: forge
   Directory: /home/forge/your-app
   ```

2. **Stel de omgevingsvariabele in**: voeg `COPILOT_URL` toe aan `.env`.

3. **Herstart bij een deploy**: herstart de Daemon in je deployscript.

In de huidige Forge-omgeving is dit mogelijk niet nodig.

```shell theme={null}
sudo supervisorctl restart daemon-123456:*
```

### Laravel Cloud

Met de workerfunctie van Laravel Cloud kun je de server als achtergrondproces draaien.

Zie [Gebruik op Laravel Cloud](/nl/packages/laravel-copilot-sdk/laravel-cloud) voor meer informatie.

## Aandachtspunten

### Beveiliging

<Warning>
  Gebruik voor de TCP-server waar mogelijk een lokale bind (`127.0.0.1`).
  Als je de server extern openstelt, configureer dan je firewall op de juiste manier.
</Warning>

### Opnieuw verbinden

De huidige versie heeft geen functie om automatisch opnieuw te verbinden. Als de verbinding wegvalt, wordt er een exception gegooid.

### Huidige modus controleren

Je kunt in je programma controleren in welke modus de client zich bevindt.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

$client = Copilot::client();

if ($client->isTcpMode()) {
    // TCP-modus
} else {
    // stdio-modus
}
```

## Problemen oplossen

### Geen verbinding mogelijk

1. Controleer of de Copilot CLI-server draait

```shell theme={null}
ps aux | grep copilot
```

2. Controleer of de poort klopt

```shell theme={null}
netstat -an | grep 12345
```

3. Controleer je firewallinstellingen

### Time-outfouten

Verhoog de waarde van `timeout` in `config/copilot.php`.

```php theme={null}
'timeout' => 120, // 2 minuten
```

<Info>
  Zie de [GitHub-repository](https://github.com/invokable/laravel-copilot-sdk) voor de meest recente informatie.
</Info>


## Related topics

- [GitHub-token](/nl/packages/laravel-copilot-sdk/github-token.md)
- [Laravel Cloud - GitHub Copilot SDK voor Laravel](/nl/packages/laravel-copilot-sdk/laravel-cloud.md)
- [Authenticatie - GitHub Copilot SDK for Laravel](/nl/packages/laravel-copilot-sdk/auth.md)
- [Remote sessions](/nl/packages/laravel-copilot-sdk/remote-sessions.md)
- [Concurrency](/nl/packages/laravel-copilot-sdk/concurrency.md)
