Skip to content

Commit 741e2ec

Browse files
authored
Merge pull request #11 from invokable/copilot/adjust-rpc-for-laravel
Port RPC API from official Copilot SDK (PRs #464, #491, #544)
2 parents a438c6d + 020e3be commit 741e2ec

54 files changed

Lines changed: 2216 additions & 1 deletion

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

copilot-sdk

Submodule copilot-sdk updated 130 files

src/Client.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Revolution\Copilot\Exceptions\JsonRpcException;
2121
use Revolution\Copilot\JsonRpc\JsonRpcClient;
2222
use Revolution\Copilot\Process\ProcessManager;
23+
use Revolution\Copilot\Rpc\ServerRpc;
2324
use Revolution\Copilot\Transport\TcpTransport;
2425
use Revolution\Copilot\Types\ForegroundSessionInfo;
2526
use Revolution\Copilot\Types\GetAuthStatusResponse;
@@ -213,6 +214,16 @@ public function stop(): array
213214
return $errors;
214215
}
215216

217+
/**
218+
* Typed server-scoped RPC methods.
219+
*/
220+
public function rpc(): ServerRpc
221+
{
222+
$this->ensureConnected();
223+
224+
return new ServerRpc($this->rpcClient);
225+
}
226+
216227
/**
217228
* Check if the client is using TCP mode.
218229
*/

src/Contracts/CopilotClient.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Revolution\Copilot\Contracts;
66

77
use Revolution\Copilot\Exceptions\JsonRpcException;
8+
use Revolution\Copilot\Rpc\ServerRpc;
89
use Revolution\Copilot\Types\GetAuthStatusResponse;
910
use Revolution\Copilot\Types\GetStatusResponse;
1011
use Revolution\Copilot\Types\ModelInfo;
@@ -25,6 +26,11 @@ interface CopilotClient
2526
*/
2627
public function start(): static;
2728

29+
/**
30+
* Typed server-scoped RPC methods.
31+
*/
32+
public function rpc(): ServerRpc;
33+
2834
/**
2935
* Create a new conversation session.
3036
*

src/Contracts/CopilotSession.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Closure;
88
use Revolution\Copilot\Enums\SessionEventType;
9+
use Revolution\Copilot\Rpc\SessionRpc;
910
use Revolution\Copilot\Types\SessionEvent;
1011

1112
/**
@@ -18,6 +19,11 @@ interface CopilotSession
1819
*/
1920
public function id(): string;
2021

22+
/**
23+
* Typed session-scoped RPC methods.
24+
*/
25+
public function rpc(): SessionRpc;
26+
2127
/**
2228
* Send a message to this session.
2329
*/

src/Enums/SessionEventType.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@ enum SessionEventType: string
1414
case SESSION_RESUME = 'session.resume';
1515
case SESSION_ERROR = 'session.error';
1616
case SESSION_IDLE = 'session.idle';
17+
case SESSION_TITLE_CHANGED = 'session.title_changed';
1718
case SESSION_INFO = 'session.info';
19+
case SESSION_WARNING = 'session.warning';
1820
case SESSION_MODEL_CHANGE = 'session.model_change';
21+
case SESSION_MODE_CHANGED = 'session.mode_changed';
22+
case SESSION_PLAN_CHANGED = 'session.plan_changed';
23+
case SESSION_WORKSPACE_FILE_CHANGED = 'session.workspace_file_changed';
1924
case SESSION_HANDOFF = 'session.handoff';
2025
case SESSION_TRUNCATION = 'session.truncation';
2126
case SESSION_SNAPSHOT_REWIND = 'session.snapshot_rewind';
@@ -24,6 +29,7 @@ enum SessionEventType: string
2429
case SESSION_COMPACTION_START = 'session.compaction_start';
2530
case SESSION_COMPACTION_COMPLETE = 'session.compaction_complete';
2631
case SESSION_CONTEXT_CHANGED = 'session.context_changed';
32+
case SESSION_TASK_COMPLETE = 'session.task_complete';
2733

2834
// User messages
2935
case USER_MESSAGE = 'user.message';
@@ -34,6 +40,7 @@ enum SessionEventType: string
3440
case ASSISTANT_INTENT = 'assistant.intent';
3541
case ASSISTANT_REASONING = 'assistant.reasoning';
3642
case ASSISTANT_REASONING_DELTA = 'assistant.reasoning_delta';
43+
case ASSISTANT_STREAMING_DELTA = 'assistant.streaming_delta';
3744
case ASSISTANT_MESSAGE = 'assistant.message';
3845
case ASSISTANT_MESSAGE_DELTA = 'assistant.message_delta';
3946
case ASSISTANT_TURN_END = 'assistant.turn_end';

src/Rpc/PendingAccount.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Revolution\Copilot\Rpc;
6+
7+
use Revolution\Copilot\JsonRpc\JsonRpcClient;
8+
use Revolution\Copilot\Types\Rpc\AccountGetQuotaResult;
9+
10+
/**
11+
* Pending account RPC operations.
12+
*/
13+
class PendingAccount
14+
{
15+
public function __construct(
16+
protected JsonRpcClient $client,
17+
) {}
18+
19+
/**
20+
* Get account quota.
21+
*/
22+
public function getQuota(): AccountGetQuotaResult
23+
{
24+
return AccountGetQuotaResult::fromArray(
25+
$this->client->request('account.getQuota', []),
26+
);
27+
}
28+
}

src/Rpc/PendingAgent.php

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Revolution\Copilot\Rpc;
6+
7+
use Revolution\Copilot\JsonRpc\JsonRpcClient;
8+
use Revolution\Copilot\Types\Rpc\SessionAgentGetCurrentResult;
9+
use Revolution\Copilot\Types\Rpc\SessionAgentListResult;
10+
use Revolution\Copilot\Types\Rpc\SessionAgentSelectParams;
11+
use Revolution\Copilot\Types\Rpc\SessionAgentSelectResult;
12+
13+
/**
14+
* Pending agent RPC operations for a session.
15+
*/
16+
class PendingAgent
17+
{
18+
public function __construct(
19+
protected JsonRpcClient $client,
20+
protected string $sessionId,
21+
) {}
22+
23+
/**
24+
* List available agents.
25+
*/
26+
public function list(): SessionAgentListResult
27+
{
28+
return SessionAgentListResult::fromArray(
29+
$this->client->request('session.agent.list', [
30+
'sessionId' => $this->sessionId,
31+
]),
32+
);
33+
}
34+
35+
/**
36+
* Get the current agent.
37+
*/
38+
public function getCurrent(): SessionAgentGetCurrentResult
39+
{
40+
return SessionAgentGetCurrentResult::fromArray(
41+
$this->client->request('session.agent.getCurrent', [
42+
'sessionId' => $this->sessionId,
43+
]),
44+
);
45+
}
46+
47+
/**
48+
* Select an agent.
49+
*/
50+
public function select(SessionAgentSelectParams|array $params): SessionAgentSelectResult
51+
{
52+
$paramsArray = $params instanceof SessionAgentSelectParams ? $params->toArray() : $params;
53+
$paramsArray['sessionId'] = $this->sessionId;
54+
55+
return SessionAgentSelectResult::fromArray(
56+
$this->client->request('session.agent.select', $paramsArray),
57+
);
58+
}
59+
60+
/**
61+
* Deselect the current agent.
62+
*/
63+
public function deselect(): array
64+
{
65+
return $this->client->request('session.agent.deselect', [
66+
'sessionId' => $this->sessionId,
67+
]);
68+
}
69+
}

src/Rpc/PendingCompaction.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Revolution\Copilot\Rpc;
6+
7+
use Revolution\Copilot\JsonRpc\JsonRpcClient;
8+
use Revolution\Copilot\Types\Rpc\SessionCompactionCompactResult;
9+
10+
/**
11+
* Pending compaction RPC operations for a session.
12+
*/
13+
class PendingCompaction
14+
{
15+
public function __construct(
16+
protected JsonRpcClient $client,
17+
protected string $sessionId,
18+
) {}
19+
20+
/**
21+
* Compact the session history.
22+
*/
23+
public function compact(): SessionCompactionCompactResult
24+
{
25+
return SessionCompactionCompactResult::fromArray(
26+
$this->client->request('session.compaction.compact', [
27+
'sessionId' => $this->sessionId,
28+
]),
29+
);
30+
}
31+
}

src/Rpc/PendingFleet.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Revolution\Copilot\Rpc;
6+
7+
use Revolution\Copilot\JsonRpc\JsonRpcClient;
8+
use Revolution\Copilot\Types\Rpc\SessionFleetStartParams;
9+
use Revolution\Copilot\Types\Rpc\SessionFleetStartResult;
10+
11+
/**
12+
* Pending fleet RPC operations for a session.
13+
*/
14+
class PendingFleet
15+
{
16+
public function __construct(
17+
protected JsonRpcClient $client,
18+
protected string $sessionId,
19+
) {}
20+
21+
/**
22+
* Start fleet mode.
23+
*/
24+
public function start(SessionFleetStartParams|array $params = []): SessionFleetStartResult
25+
{
26+
$paramsArray = $params instanceof SessionFleetStartParams ? $params->toArray() : $params;
27+
$paramsArray['sessionId'] = $this->sessionId;
28+
29+
return SessionFleetStartResult::fromArray(
30+
$this->client->request('session.fleet.start', $paramsArray),
31+
);
32+
}
33+
}

src/Rpc/PendingMode.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Revolution\Copilot\Rpc;
6+
7+
use Revolution\Copilot\JsonRpc\JsonRpcClient;
8+
use Revolution\Copilot\Types\Rpc\SessionModeGetResult;
9+
use Revolution\Copilot\Types\Rpc\SessionModeSetParams;
10+
use Revolution\Copilot\Types\Rpc\SessionModeSetResult;
11+
12+
/**
13+
* Pending mode RPC operations for a session.
14+
*/
15+
class PendingMode
16+
{
17+
public function __construct(
18+
protected JsonRpcClient $client,
19+
protected string $sessionId,
20+
) {}
21+
22+
/**
23+
* Get the current mode.
24+
*/
25+
public function get(): SessionModeGetResult
26+
{
27+
return SessionModeGetResult::fromArray(
28+
$this->client->request('session.mode.get', [
29+
'sessionId' => $this->sessionId,
30+
]),
31+
);
32+
}
33+
34+
/**
35+
* Set the mode.
36+
*/
37+
public function set(SessionModeSetParams|array $params): SessionModeSetResult
38+
{
39+
$paramsArray = $params instanceof SessionModeSetParams ? $params->toArray() : $params;
40+
$paramsArray['sessionId'] = $this->sessionId;
41+
42+
return SessionModeSetResult::fromArray(
43+
$this->client->request('session.mode.set', $paramsArray),
44+
);
45+
}
46+
}

0 commit comments

Comments
 (0)