Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion copilot-sdk
Submodule copilot-sdk updated 130 files
11 changes: 11 additions & 0 deletions src/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
use Revolution\Copilot\Exceptions\JsonRpcException;
use Revolution\Copilot\JsonRpc\JsonRpcClient;
use Revolution\Copilot\Process\ProcessManager;
use Revolution\Copilot\Rpc\ServerRpc;
use Revolution\Copilot\Transport\TcpTransport;
use Revolution\Copilot\Types\ForegroundSessionInfo;
use Revolution\Copilot\Types\GetAuthStatusResponse;
Expand Down Expand Up @@ -213,6 +214,16 @@ public function stop(): array
return $errors;
}

/**
* Typed server-scoped RPC methods.
*/
public function rpc(): ServerRpc
{
$this->ensureConnected();

return new ServerRpc($this->rpcClient);
}

/**
* Check if the client is using TCP mode.
*/
Expand Down
6 changes: 6 additions & 0 deletions src/Contracts/CopilotClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace Revolution\Copilot\Contracts;

use Revolution\Copilot\Exceptions\JsonRpcException;
use Revolution\Copilot\Rpc\ServerRpc;
use Revolution\Copilot\Types\GetAuthStatusResponse;
use Revolution\Copilot\Types\GetStatusResponse;
use Revolution\Copilot\Types\ModelInfo;
Expand All @@ -25,6 +26,11 @@ interface CopilotClient
*/
public function start(): static;

/**
* Typed server-scoped RPC methods.
*/
public function rpc(): ServerRpc;

/**
* Create a new conversation session.
*
Expand Down
6 changes: 6 additions & 0 deletions src/Contracts/CopilotSession.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use Closure;
use Revolution\Copilot\Enums\SessionEventType;
use Revolution\Copilot\Rpc\SessionRpc;
use Revolution\Copilot\Types\SessionEvent;

/**
Expand All @@ -18,6 +19,11 @@ interface CopilotSession
*/
public function id(): string;

/**
* Typed session-scoped RPC methods.
*/
public function rpc(): SessionRpc;

/**
* Send a message to this session.
*/
Expand Down
7 changes: 7 additions & 0 deletions src/Enums/SessionEventType.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,13 @@ enum SessionEventType: string
case SESSION_RESUME = 'session.resume';
case SESSION_ERROR = 'session.error';
case SESSION_IDLE = 'session.idle';
case SESSION_TITLE_CHANGED = 'session.title_changed';
case SESSION_INFO = 'session.info';
case SESSION_WARNING = 'session.warning';
case SESSION_MODEL_CHANGE = 'session.model_change';
case SESSION_MODE_CHANGED = 'session.mode_changed';
case SESSION_PLAN_CHANGED = 'session.plan_changed';
case SESSION_WORKSPACE_FILE_CHANGED = 'session.workspace_file_changed';
case SESSION_HANDOFF = 'session.handoff';
case SESSION_TRUNCATION = 'session.truncation';
case SESSION_SNAPSHOT_REWIND = 'session.snapshot_rewind';
Expand All @@ -24,6 +29,7 @@ enum SessionEventType: string
case SESSION_COMPACTION_START = 'session.compaction_start';
case SESSION_COMPACTION_COMPLETE = 'session.compaction_complete';
case SESSION_CONTEXT_CHANGED = 'session.context_changed';
case SESSION_TASK_COMPLETE = 'session.task_complete';

// User messages
case USER_MESSAGE = 'user.message';
Expand All @@ -34,6 +40,7 @@ enum SessionEventType: string
case ASSISTANT_INTENT = 'assistant.intent';
case ASSISTANT_REASONING = 'assistant.reasoning';
case ASSISTANT_REASONING_DELTA = 'assistant.reasoning_delta';
case ASSISTANT_STREAMING_DELTA = 'assistant.streaming_delta';
case ASSISTANT_MESSAGE = 'assistant.message';
case ASSISTANT_MESSAGE_DELTA = 'assistant.message_delta';
case ASSISTANT_TURN_END = 'assistant.turn_end';
Expand Down
28 changes: 28 additions & 0 deletions src/Rpc/PendingAccount.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

declare(strict_types=1);

namespace Revolution\Copilot\Rpc;

use Revolution\Copilot\JsonRpc\JsonRpcClient;
use Revolution\Copilot\Types\Rpc\AccountGetQuotaResult;

/**
* Pending account RPC operations.
*/
class PendingAccount
{
public function __construct(
protected JsonRpcClient $client,
) {}

/**
* Get account quota.
*/
public function getQuota(): AccountGetQuotaResult
{
return AccountGetQuotaResult::fromArray(
$this->client->request('account.getQuota', []),
);
}
}
69 changes: 69 additions & 0 deletions src/Rpc/PendingAgent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php

declare(strict_types=1);

namespace Revolution\Copilot\Rpc;

use Revolution\Copilot\JsonRpc\JsonRpcClient;
use Revolution\Copilot\Types\Rpc\SessionAgentGetCurrentResult;
use Revolution\Copilot\Types\Rpc\SessionAgentListResult;
use Revolution\Copilot\Types\Rpc\SessionAgentSelectParams;
use Revolution\Copilot\Types\Rpc\SessionAgentSelectResult;

/**
* Pending agent RPC operations for a session.
*/
class PendingAgent
{
public function __construct(
protected JsonRpcClient $client,
protected string $sessionId,
) {}

/**
* List available agents.
*/
public function list(): SessionAgentListResult
{
return SessionAgentListResult::fromArray(
$this->client->request('session.agent.list', [
'sessionId' => $this->sessionId,
]),
);
}

/**
* Get the current agent.
*/
public function getCurrent(): SessionAgentGetCurrentResult
{
return SessionAgentGetCurrentResult::fromArray(
$this->client->request('session.agent.getCurrent', [
'sessionId' => $this->sessionId,
]),
);
}

/**
* Select an agent.
*/
public function select(SessionAgentSelectParams|array $params): SessionAgentSelectResult
{
$paramsArray = $params instanceof SessionAgentSelectParams ? $params->toArray() : $params;
$paramsArray['sessionId'] = $this->sessionId;

return SessionAgentSelectResult::fromArray(
$this->client->request('session.agent.select', $paramsArray),
);
}

/**
* Deselect the current agent.
*/
public function deselect(): array
{
return $this->client->request('session.agent.deselect', [
'sessionId' => $this->sessionId,
]);
}
}
31 changes: 31 additions & 0 deletions src/Rpc/PendingCompaction.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

declare(strict_types=1);

namespace Revolution\Copilot\Rpc;

use Revolution\Copilot\JsonRpc\JsonRpcClient;
use Revolution\Copilot\Types\Rpc\SessionCompactionCompactResult;

/**
* Pending compaction RPC operations for a session.
*/
class PendingCompaction
{
public function __construct(
protected JsonRpcClient $client,
protected string $sessionId,
) {}

/**
* Compact the session history.
*/
public function compact(): SessionCompactionCompactResult
{
return SessionCompactionCompactResult::fromArray(
$this->client->request('session.compaction.compact', [
'sessionId' => $this->sessionId,
]),
);
}
}
33 changes: 33 additions & 0 deletions src/Rpc/PendingFleet.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

declare(strict_types=1);

namespace Revolution\Copilot\Rpc;

use Revolution\Copilot\JsonRpc\JsonRpcClient;
use Revolution\Copilot\Types\Rpc\SessionFleetStartParams;
use Revolution\Copilot\Types\Rpc\SessionFleetStartResult;

/**
* Pending fleet RPC operations for a session.
*/
class PendingFleet
{
public function __construct(
protected JsonRpcClient $client,
protected string $sessionId,
) {}

/**
* Start fleet mode.
*/
public function start(SessionFleetStartParams|array $params = []): SessionFleetStartResult
{
$paramsArray = $params instanceof SessionFleetStartParams ? $params->toArray() : $params;
$paramsArray['sessionId'] = $this->sessionId;

return SessionFleetStartResult::fromArray(
$this->client->request('session.fleet.start', $paramsArray),
);
}
}
46 changes: 46 additions & 0 deletions src/Rpc/PendingMode.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

declare(strict_types=1);

namespace Revolution\Copilot\Rpc;

use Revolution\Copilot\JsonRpc\JsonRpcClient;
use Revolution\Copilot\Types\Rpc\SessionModeGetResult;
use Revolution\Copilot\Types\Rpc\SessionModeSetParams;
use Revolution\Copilot\Types\Rpc\SessionModeSetResult;

/**
* Pending mode RPC operations for a session.
*/
class PendingMode
{
public function __construct(
protected JsonRpcClient $client,
protected string $sessionId,
) {}

/**
* Get the current mode.
*/
public function get(): SessionModeGetResult
{
return SessionModeGetResult::fromArray(
$this->client->request('session.mode.get', [
'sessionId' => $this->sessionId,
]),
);
}

/**
* Set the mode.
*/
public function set(SessionModeSetParams|array $params): SessionModeSetResult
{
$paramsArray = $params instanceof SessionModeSetParams ? $params->toArray() : $params;
$paramsArray['sessionId'] = $this->sessionId;

return SessionModeSetResult::fromArray(
$this->client->request('session.mode.set', $paramsArray),
);
}
}
46 changes: 46 additions & 0 deletions src/Rpc/PendingModel.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

declare(strict_types=1);

namespace Revolution\Copilot\Rpc;

use Revolution\Copilot\JsonRpc\JsonRpcClient;
use Revolution\Copilot\Types\Rpc\SessionModelGetCurrentResult;
use Revolution\Copilot\Types\Rpc\SessionModelSwitchToParams;
use Revolution\Copilot\Types\Rpc\SessionModelSwitchToResult;

/**
* Pending model RPC operations for a session.
*/
class PendingModel
{
public function __construct(
protected JsonRpcClient $client,
protected string $sessionId,
) {}

/**
* Get the current model for this session.
*/
public function getCurrent(): SessionModelGetCurrentResult
{
return SessionModelGetCurrentResult::fromArray(
$this->client->request('session.model.getCurrent', [
'sessionId' => $this->sessionId,
]),
);
}

/**
* Switch to a different model.
*/
public function switchTo(SessionModelSwitchToParams|array $params): SessionModelSwitchToResult
{
$paramsArray = $params instanceof SessionModelSwitchToParams ? $params->toArray() : $params;
$paramsArray['sessionId'] = $this->sessionId;

return SessionModelSwitchToResult::fromArray(
$this->client->request('session.model.switchTo', $paramsArray),
);
}
}
28 changes: 28 additions & 0 deletions src/Rpc/PendingModels.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

declare(strict_types=1);

namespace Revolution\Copilot\Rpc;

use Revolution\Copilot\JsonRpc\JsonRpcClient;
use Revolution\Copilot\Types\Rpc\ModelsListResult;

/**
* Pending models RPC operations.
*/
class PendingModels
{
public function __construct(
protected JsonRpcClient $client,
) {}

/**
* List available models.
*/
public function list(): ModelsListResult
{
return ModelsListResult::fromArray(
$this->client->request('models.list', []),
);
}
}
Loading