revolution / laravel-copilot-sdk
Copilot CLI SDK for Laravel
Fund package maintenance!
invokable
Installs: 142
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
pkg:composer/revolution/laravel-copilot-sdk
Requires
- php: ^8.4
- illuminate/support: ^12.45
Requires (Dev)
- laravel/pint: ^1.25
- mockery/mockery: ^1.6
- orchestra/testbench: ^10.6
- pestphp/pest: ^4.1
- pestphp/pest-plugin-laravel: ^4.0
- revolution/laravel-boost-copilot-cli: ^2.0
- spatie/fork: ^1.2
README
This package is Laravel version of GitHub Copilot CLI SDK, which allows you to interact with GitHub Copilot CLI programmatically from your Laravel applications.
Requirements
- PHP >= 8.4
- Laravel >= 12.x
- Copilot CLI
Installation
composer require revolution/laravel-copilot-sdk
Optional operation
.env (Optional)
COPILOT_CLI_PATH=copilot
TCP Mode (Optional)
Instead of starting a new CLI process for each request, you can connect to an existing Copilot CLI server running in TCP mode. This is useful for:
- Laravel Forge/Cloud deployments with background process management
- Sharing a single CLI instance across multiple Laravel processes
- Better performance with persistent connections
Start the Copilot CLI server:
copilot --server --port 12345
Configure your .env:
COPILOT_URL=tcp://127.0.0.1:12345
When COPILOT_URL is set, the SDK will connect to the existing server instead of starting a new CLI process.
Publish config (Optional)
php artisan vendor:publish --tag=copilot-config
Uninstall
composer remove revolution/laravel-copilot-sdk
Usage
We provide a high-level API that uses a Laravel Facade on top of a layer that replicates the official SDK.
This should be sufficient for general use.
Run single prompt
use Revolution\Copilot\Facades\Copilot; $response = Copilot::run(prompt: 'Tell me something about Laravel.'); dump($response->content());
Multiple prompts in a single session
use Revolution\Copilot\Contracts\CopilotSession; use Revolution\Copilot\Facades\Copilot; $content = Copilot::start(function (CopilotSession $session) { dump('Starting Copilot session: '.$session->id()); $response = $session->sendAndWait(prompt: 'Tell me something about PHP.'); dump($response->content()); $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.'); dump($response->content()); return $response->content(); }); dump($content);
Testing
Provide Laravel way testing support with Copilot::fake().
Copilot::fake()
Copilot::fake() is a mock for features used from the Copilot Facade. Other features are not mocked.
use Revolution\Copilot\Facades\Copilot; Copilot::fake('2'); $response = Copilot::run(prompt: '1 + 1'); // Pest expect($response->content())->toBe('2'); // PHPUnit $this->assertEquals('2', $response->content());
When calling multiple times with Copilot::start()
use Revolution\Copilot\Facades\Copilot; use Revolution\Copilot\Contracts\CopilotSession; Copilot::fake([ '*' => Copilot::sequence() ->push(Copilot::response('2')) ->push(Copilot::response('4')), ]); Copilot::start(function (CopilotSession $session) use (&$response1, &$response2) { $response1 = $session->sendAndWait(prompt: '1 + 1'); $response2 = $session->sendAndWait(prompt: '2 + 2'); }); expect($response1->content())->toBe('2');
Assertions
Assert that a specific prompt was called.
Copilot::assertPrompt('1 + *');
Assert that a prompt was not called.
Copilot::assertNotPrompt('1 + *');
Assert the number of prompts called.
Copilot::assertPromptCount(3);
Assert that no prompts were called.
Copilot::assertNothingSent();
Prevent stray requests
Prevent all JSON-RPC requests. If called, an exception Revolution\Copilot\Exceptions\StrayRequestException is thrown.
Copilot::preventStrayRequests();
When you want to allow only some commands.
Copilot::preventStrayRequests(allow: ['ping']);
Stop prevention.
Copilot::preventStrayRequests(false);
Only JSON-RPC requests are prevented, so starting a client is not prevented.
Documentation
Most of the English documentation is included in the official SDK, so we won't provide much here. README and Getting Started Guide are provided in English.
Only Japanese documentation is available in docs/jp. Ask Copilot!!
Our other packages
License
MIT