PHP code example of hardimpactdev / opencode-sdk-laravel

1. Go to this page and download the library: Download hardimpactdev/opencode-sdk-laravel library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

hardimpactdev / opencode-sdk-laravel example snippets


// config/opencode.php
return [
    'base_url' => env('OPENCODE_BASE_URL', 'http://localhost:4096'),
];

use HardImpact\OpenCode\Facades\OpenCode;

$session = OpenCode::sessions()->create(directory: '/path/to/project');

use HardImpact\OpenCode\OpenCode;

public function __construct(private OpenCode $opencode) {}

use HardImpact\OpenCode\OpenCode;

$opencode = new OpenCode('http://localhost:4096');

// Create
$session = $opencode->sessions()->create(directory: '/path/to/project', title: 'My Session');

// List all
$sessions = $opencode->sessions()->list();

// Get by ID
$session = $opencode->sessions()->get(id: 'ses_xxx');

// Update
$session = $opencode->sessions()->update(id: 'ses_xxx', title: 'New Title');

// Delete
$opencode->sessions()->delete(id: 'ses_xxx');

// Abort active operation
$opencode->sessions()->abort(id: 'ses_xxx');

// Sync (waits for completion)
$response = $opencode->sessions()->sendMessage(
    id: 'ses_xxx',
    providerID: 'anthropic',
    modelID: 'claude-sonnet-4-20250514',
    text: 'What files are in this project?',
);

// $response->info is an AssistantMessage
// $response->parts is an array of Part DTOs

// Async (returns immediately, monitor via events)
$opencode->sessions()->sendMessageAsync(
    id: 'ses_xxx',
    providerID: 'anthropic',
    modelID: 'claude-sonnet-4-20250514',
    text: 'Refactor the auth module',
);

// Send with raw parts (for file attachments, etc.)
$response = $opencode->sessions()->sendMessageWithParts(
    id: 'ses_xxx',
    providerID: 'anthropic',
    modelID: 'claude-sonnet-4-20250514',
    parts: [
        ['type' => 'text', 'text' => 'Review this file'],
        ['type' => 'file', 'mime' => 'text/plain', 'url' => 'file:///path/to/file.php'],
    ],
);

// Get message history
$messages = $opencode->sessions()->messages(id: 'ses_xxx');

$response = $opencode->sessions()->command(
    id: 'ses_xxx',
    command: 'compact',
    arguments: '',
);

// Initialize
$opencode->sessions()->init(id: 'ses_xxx', messageID: '...', modelID: '...', providerID: '...');

// Summarize
$opencode->sessions()->summarize(id: 'ses_xxx', modelID: '...', providerID: '...');

// Revert to a previous message
$session = $opencode->sessions()->revert(id: 'ses_xxx', messageID: 'msg_xxx');

// Undo revert
$session = $opencode->sessions()->unrevert(id: 'ses_xxx');

// Share / unshare
$session = $opencode->sessions()->share(id: 'ses_xxx');
$session = $opencode->sessions()->unshare(id: 'ses_xxx');

// List pending permissions
$questions = $opencode->questions()->list();

// Approve once
$opencode->questions()->answer(
    sessionId: 'ses_xxx',
    permissionId: 'perm_xxx',
    response: 'once',
);

// Approve always (for this pattern)
$opencode->questions()->answer(
    sessionId: 'ses_xxx',
    permissionId: 'perm_xxx',
    response: 'always',
);

// Reject
$opencode->questions()->reject(sessionId: 'ses_xxx', permissionId: 'perm_xxx');

foreach ($opencode->events()->stream() as $event) {
    match ($event->type) {
        EventType::SessionIdle => handleDone($event),
        EventType::SessionError => handleError($event),
        EventType::MessagePartUpdated => handlePartUpdate($event),
        EventType::PermissionUpdated => handlePermission($event),
        default => null,
    };
}

// List all projects
$projects = $opencode->projects()->list();

// Get current project
$project = $opencode->projects()->current();

// Update project properties (name, icon, startup script)
$project = $opencode->projects()->update(
    id: 'proj_xxx',
    name: 'My Project',
    icon: ['override' => 'rocket', 'color' => '#ff0000'],
    commands: ['start' => 'php artisan serve'],
);

$providers = $opencode->providers()->list();

use HardImpact\OpenCode\Models\OpenCodeSession;

// Create a session linked to any model via polymorphic relationship
$session = OpenCodeSession::query()->create([
    'sessionable_id' => $task->id,
    'sessionable_type' => Task::class,
    'session_id' => 'ses_xxx',
    'workspace' => '/path/to/project',
    'provider' => 'anthropic',
    'model' => 'claude-sonnet-4-20250514',
    'status' => 'created',
]);

// Status helpers
$session->isActive();    // true when status is Active
$session->isIdle();      // true when status is Idle
$session->isTerminal();  // true when status is Completed or Failed

use HardImpact\OpenCode\SessionManager;

$manager = new SessionManager;

// Assess session state by querying the OpenCode API
$assessment = $manager->assess($session);
$assessment->state;            // SessionState enum (Active, Idle, Completed, Missing)
$assessment->shouldComplete(); // true when state is Completed or Idle
$assessment->isMissing();      // true when the API session was not found

// With completion pattern matching
$assessment = $manager->assess($session, ['/task completed/i', '/all done/i']);

// Lifecycle transitions (each dispatches a Laravel event)
$manager->activate($session);   // → SessionActivated
$manager->markIdle($session);   // → SessionBecameIdle
$manager->complete($session);   // → SessionCompleted
$manager->fail($session, $msg); // → SessionFailed
$manager->interrupt($session);  // → SessionInterrupted
$manager->recover($session);    // → SessionRecovered

$part = Part::fromTolerant($data); // returns null if data is invalid, maps unknown enums to Unknown
bash
php artisan vendor:publish --tag="opencode-config"
bash
composer analyse