acp-sdk 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/README.md +66 -41
- data/lib/acp/agent_connection/client.rb +82 -3
- data/lib/acp/agent_connection/optional_method/authenticate.rb +21 -0
- data/lib/acp/agent_connection/optional_method/close_session.rb +21 -0
- data/lib/acp/agent_connection/optional_method/delete_session.rb +21 -0
- data/lib/acp/agent_connection/optional_method/list_sessions.rb +21 -0
- data/lib/acp/agent_connection/optional_method/load_session.rb +21 -0
- data/lib/acp/agent_connection/optional_method/resume_session.rb +21 -0
- data/lib/acp/agent_connection/optional_method.rb +1 -25
- data/lib/acp/agent_connection.rb +47 -47
- data/lib/acp/agent_process.rb +119 -0
- data/lib/acp/client_connection.rb +13 -15
- data/lib/acp/request_error.rb +81 -0
- data/lib/acp/transport/reply.rb +4 -4
- data/lib/acp/transport/stdio.rb +28 -25
- data/lib/acp/types.rb +4 -0
- data/lib/acp/version.rb +1 -1
- data/sig/generated/acp/agent_connection/client.rbs +51 -2
- data/sig/generated/acp/agent_connection/optional_method/authenticate.rbs +13 -0
- data/sig/generated/acp/agent_connection/optional_method/close_session.rbs +13 -0
- data/sig/generated/acp/agent_connection/optional_method/delete_session.rbs +13 -0
- data/sig/generated/acp/agent_connection/optional_method/list_sessions.rbs +13 -0
- data/sig/generated/acp/agent_connection/optional_method/load_session.rbs +13 -0
- data/sig/generated/acp/agent_connection/optional_method/resume_session.rbs +13 -0
- data/sig/generated/acp/agent_connection/optional_method.rbs +1 -18
- data/sig/generated/acp/agent_connection.rbs +17 -22
- data/sig/generated/acp/agent_process.rbs +72 -0
- data/sig/generated/acp/client_connection.rbs +16 -16
- data/sig/generated/acp/request_error.rbs +65 -0
- data/sig/generated/acp/transport/reply.rbs +5 -5
- data/sig/generated/acp/transport/stdio.rbs +14 -19
- data/sig/generated/acp/types.rbs +4 -0
- data/sig/manual/acp/agent_connection/optional_method/authenticate.rbs +6 -0
- data/sig/manual/acp/agent_connection/optional_method/close_session.rbs +6 -0
- data/sig/manual/acp/agent_connection/optional_method/delete_session.rbs +6 -0
- data/sig/manual/acp/agent_connection/optional_method/list_sessions.rbs +6 -0
- data/sig/manual/acp/agent_connection/optional_method/load_session.rbs +6 -0
- data/sig/manual/acp/agent_connection/optional_method/resume_session.rbs +6 -0
- data/sig/manual/acp/agent_connection.rbs +55 -6
- data/sig/manual/acp/agent_process.rbs +7 -0
- data/sig/manual/acp/client_connection.rbs +1 -1
- data/sig/manual/acp/transport/stdio.rbs +7 -1
- metadata +26 -8
- data/lib/acp/transport/response_error.rb +0 -28
- data/lib/acp/transport/result.rb +0 -35
- data/sig/generated/acp/transport/response_error.rbs +0 -21
- data/sig/generated/acp/transport/result.rbs +0 -25
- data/sig/manual/acp/types.rbs +0 -2
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
# Generated from lib/acp/agent_connection.rb with RBS::Inline
|
|
2
2
|
|
|
3
3
|
class ACP::AgentConnection
|
|
4
|
-
@
|
|
5
|
-
|
|
6
|
-
@auth_methods: Array[ACP::Types::AuthMethod::t]
|
|
7
|
-
|
|
8
|
-
@agent_info: ACP::Types::Implementation?
|
|
4
|
+
@transport: ACP::AgentConnection::_Transport
|
|
9
5
|
|
|
10
|
-
@
|
|
6
|
+
@initialize_response: ACP::Types::InitializeResponse
|
|
11
7
|
|
|
12
|
-
@
|
|
8
|
+
@factory: ^(ACP::AgentConnection::Client) -> ACP::AgentConnection::_Agent
|
|
13
9
|
|
|
14
10
|
PROTOCOL_VERSION: Integer
|
|
15
11
|
|
|
16
|
-
|
|
12
|
+
OPTIONAL: Array[ACP::AgentConnection::_OptionalMethod]
|
|
17
13
|
|
|
18
|
-
|
|
14
|
+
# The schema has no initialize capability for modes or config options: an
|
|
15
|
+
# agent offers them per session, in its session responses, so they are
|
|
16
|
+
# routed whenever the agent defines them.
|
|
17
|
+
PER_SESSION: Hash[String, Symbol]
|
|
19
18
|
|
|
20
19
|
# @rbs transport: ACP::AgentConnection::_Transport
|
|
21
20
|
# @rbs capabilities: ACP::Types::AgentCapabilities
|
|
@@ -32,8 +31,8 @@ class ACP::AgentConnection
|
|
|
32
31
|
|
|
33
32
|
# @rbs agent: ACP::AgentConnection::_Agent
|
|
34
33
|
# @rbs client: ACP::AgentConnection::Client
|
|
35
|
-
# @rbs return: Hash[String, ^(untyped) -> (ACP::
|
|
36
|
-
def requests: (ACP::AgentConnection::_Agent agent, ACP::AgentConnection::Client client) -> Hash[String, ^(untyped) -> (ACP::
|
|
34
|
+
# @rbs return: Hash[String, ^(untyped) -> (ACP::AgentConnection::_Response | ACP::RequestError | ACP::Transport::Reply)]
|
|
35
|
+
def requests: (ACP::AgentConnection::_Agent agent, ACP::AgentConnection::Client client) -> Hash[String, ^(untyped) -> (ACP::AgentConnection::_Response | ACP::RequestError | ACP::Transport::Reply)]
|
|
37
36
|
|
|
38
37
|
# @rbs agent: ACP::AgentConnection::_Agent
|
|
39
38
|
# @rbs return: Hash[String, ^(untyped) -> void]
|
|
@@ -42,24 +41,20 @@ class ACP::AgentConnection
|
|
|
42
41
|
# Generated from_h raises on a missing key or a value of the wrong shape.
|
|
43
42
|
#
|
|
44
43
|
# @rbs type: ACP::AgentConnection::_Parser
|
|
45
|
-
# @rbs &handle: (untyped) -> (ACP::
|
|
46
|
-
# @rbs return: ^(untyped) -> (ACP::
|
|
47
|
-
def route: (ACP::AgentConnection::_Parser type) { (untyped) -> (ACP::
|
|
48
|
-
|
|
49
|
-
# @rbs response: ACP::AgentConnection::_Response | ACP::Transport::ResponseError
|
|
50
|
-
# @rbs return: ACP::Transport::Result
|
|
51
|
-
def respond: (ACP::AgentConnection::_Response | ACP::Transport::ResponseError response) -> ACP::Transport::Result
|
|
44
|
+
# @rbs &handle: (untyped) -> (ACP::AgentConnection::_Response | ACP::RequestError | ACP::Transport::Reply)
|
|
45
|
+
# @rbs return: ^(untyped) -> (ACP::AgentConnection::_Response | ACP::RequestError | ACP::Transport::Reply)
|
|
46
|
+
def route: (ACP::AgentConnection::_Parser type) { (untyped) -> (ACP::AgentConnection::_Response | ACP::RequestError | ACP::Transport::Reply) } -> ^(untyped) -> (ACP::AgentConnection::_Response | ACP::RequestError | ACP::Transport::Reply)
|
|
52
47
|
|
|
53
48
|
# @rbs client: ACP::AgentConnection::Client
|
|
54
49
|
# @rbs request: ACP::Types::InitializeRequest
|
|
55
|
-
# @rbs return: ACP::
|
|
56
|
-
def connect: (ACP::AgentConnection::Client client, ACP::Types::InitializeRequest request) -> ACP::
|
|
50
|
+
# @rbs return: ACP::Types::InitializeResponse
|
|
51
|
+
def connect: (ACP::AgentConnection::Client client, ACP::Types::InitializeRequest request) -> ACP::Types::InitializeResponse
|
|
57
52
|
|
|
58
53
|
# session_created runs after the reply because the client must know the
|
|
59
54
|
# session id before updates for it (e.g. available commands) arrive.
|
|
60
55
|
#
|
|
61
56
|
# @rbs agent: ACP::AgentConnection::_Agent
|
|
62
57
|
# @rbs request: ACP::Types::NewSessionRequest
|
|
63
|
-
# @rbs return: ACP::
|
|
64
|
-
def new_session: (ACP::AgentConnection::_Agent agent, ACP::Types::NewSessionRequest request) -> (ACP::
|
|
58
|
+
# @rbs return: (ACP::Types::NewSessionResponse | ACP::RequestError | ACP::Transport::Reply)
|
|
59
|
+
def new_session: (ACP::AgentConnection::_Agent agent, ACP::Types::NewSessionRequest request) -> (ACP::Types::NewSessionResponse | ACP::RequestError | ACP::Transport::Reply)
|
|
65
60
|
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Generated from lib/acp/agent_process.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
# A child agent process and the ACP::ClientConnection wired to its stdio.
|
|
4
|
+
# Spawn one with ACP::AgentProcess.spawn.
|
|
5
|
+
class ACP::AgentProcess
|
|
6
|
+
@stderr: String?
|
|
7
|
+
|
|
8
|
+
@err_reader: Thread?
|
|
9
|
+
|
|
10
|
+
@err_r: IO?
|
|
11
|
+
|
|
12
|
+
@waiter: Process::Waiter
|
|
13
|
+
|
|
14
|
+
@stdout: IO
|
|
15
|
+
|
|
16
|
+
@stdin: IO
|
|
17
|
+
|
|
18
|
+
@pid: Integer
|
|
19
|
+
|
|
20
|
+
@reader: Thread
|
|
21
|
+
|
|
22
|
+
@connection: ACP::ClientConnection
|
|
23
|
+
|
|
24
|
+
# @dynamic pid
|
|
25
|
+
attr_reader pid: Integer
|
|
26
|
+
|
|
27
|
+
# @dynamic connection
|
|
28
|
+
attr_reader connection: ACP::ClientConnection
|
|
29
|
+
|
|
30
|
+
# Child stderr captured when spawn was given stderr: :capture, else nil.
|
|
31
|
+
#
|
|
32
|
+
# @dynamic stderr
|
|
33
|
+
attr_reader stderr: String?
|
|
34
|
+
|
|
35
|
+
# Starts a command with args, env and cwd, wires its stdio to a new
|
|
36
|
+
# ACP::ClientConnection and starts it. With a block, yields the connection
|
|
37
|
+
# and this process, then terminates the child when the block exits; without
|
|
38
|
+
# one, returns the process and terminate is the caller's job.
|
|
39
|
+
#
|
|
40
|
+
# @rbs command: String
|
|
41
|
+
# @rbs *args: String
|
|
42
|
+
# @rbs env: Hash[String, String]?
|
|
43
|
+
# @rbs cwd: String?
|
|
44
|
+
# @rbs stderr: (:inherit | :capture)
|
|
45
|
+
# @rbs permission: ACP::ClientConnection::_PermissionHandler
|
|
46
|
+
# @rbs updates: ACP::ClientConnection::_UpdateHandler
|
|
47
|
+
# @rbs &block: ? (ACP::ClientConnection, ACP::AgentProcess) -> untyped
|
|
48
|
+
# @rbs return: (untyped | ACP::AgentProcess)
|
|
49
|
+
def self.spawn: (String command, *String args, permission: ACP::ClientConnection::_PermissionHandler, ?env: Hash[String, String]?, ?cwd: String?, ?stderr: :inherit | :capture, ?updates: ACP::ClientConnection::_UpdateHandler) ?{ (ACP::ClientConnection, ACP::AgentProcess) -> untyped } -> (untyped | ACP::AgentProcess)
|
|
50
|
+
|
|
51
|
+
# Closes stdin, waits for the child to exit — sending TERM and then KILL if
|
|
52
|
+
# it will not — and joins the transport reader before closing the pipe it
|
|
53
|
+
# reads.
|
|
54
|
+
#
|
|
55
|
+
# @rbs return: void
|
|
56
|
+
def terminate: () -> void
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
# @rbs connection: ACP::ClientConnection
|
|
61
|
+
# @rbs reader: Thread
|
|
62
|
+
# @rbs stdin: IO
|
|
63
|
+
# @rbs stdout: IO
|
|
64
|
+
# @rbs waiter: Process::Waiter
|
|
65
|
+
# @rbs err_r: IO?
|
|
66
|
+
# @rbs return: void
|
|
67
|
+
def initialize: (connection: ACP::ClientConnection, reader: Thread, stdin: IO, stdout: IO, waiter: Process::Waiter, err_r: IO?) -> void
|
|
68
|
+
|
|
69
|
+
# @rbs sig: String
|
|
70
|
+
# @rbs return: void
|
|
71
|
+
def signal: (String sig) -> void
|
|
72
|
+
end
|
|
@@ -26,26 +26,26 @@ class ACP::ClientConnection
|
|
|
26
26
|
# sent by connect.
|
|
27
27
|
#
|
|
28
28
|
# @rbs request: ACP::Types::InitializeRequest
|
|
29
|
-
# @rbs return: ACP::Types::InitializeResponse | ACP::
|
|
30
|
-
def connect: (ACP::Types::InitializeRequest request) -> (ACP::Types::InitializeResponse | ACP::
|
|
29
|
+
# @rbs return: ACP::Types::InitializeResponse | ACP::RequestError
|
|
30
|
+
def connect: (ACP::Types::InitializeRequest request) -> (ACP::Types::InitializeResponse | ACP::RequestError)
|
|
31
31
|
|
|
32
32
|
# @rbs request: ACP::Types::NewSessionRequest
|
|
33
|
-
# @rbs return: ACP::Types::NewSessionResponse | ACP::
|
|
34
|
-
def session_new: (ACP::Types::NewSessionRequest request) -> (ACP::Types::NewSessionResponse | ACP::
|
|
33
|
+
# @rbs return: ACP::Types::NewSessionResponse | ACP::RequestError
|
|
34
|
+
def session_new: (ACP::Types::NewSessionRequest request) -> (ACP::Types::NewSessionResponse | ACP::RequestError)
|
|
35
35
|
|
|
36
36
|
# @rbs request: ACP::Types::PromptRequest
|
|
37
37
|
# @rbs &block: (ACP::Types::SessionUpdate::t) -> void
|
|
38
|
-
# @rbs return: ACP::Types::PromptResponse | ACP::
|
|
39
|
-
def session_prompt: (ACP::Types::PromptRequest request) { (ACP::Types::SessionUpdate::t) -> void } -> (ACP::Types::PromptResponse | ACP::
|
|
38
|
+
# @rbs return: ACP::Types::PromptResponse | ACP::RequestError
|
|
39
|
+
def session_prompt: (ACP::Types::PromptRequest request) { (ACP::Types::SessionUpdate::t) -> void } -> (ACP::Types::PromptResponse | ACP::RequestError)
|
|
40
40
|
|
|
41
41
|
# @rbs request: ACP::Types::LoadSessionRequest
|
|
42
42
|
# @rbs &block: (ACP::Types::SessionUpdate::t) -> void
|
|
43
|
-
# @rbs return: ACP::Types::LoadSessionResponse | ACP::
|
|
44
|
-
def session_load: (ACP::Types::LoadSessionRequest request) { (ACP::Types::SessionUpdate::t) -> void } -> (ACP::Types::LoadSessionResponse | ACP::
|
|
43
|
+
# @rbs return: ACP::Types::LoadSessionResponse | ACP::RequestError
|
|
44
|
+
def session_load: (ACP::Types::LoadSessionRequest request) { (ACP::Types::SessionUpdate::t) -> void } -> (ACP::Types::LoadSessionResponse | ACP::RequestError)
|
|
45
45
|
|
|
46
46
|
# @rbs request: ACP::Types::ListSessionsRequest
|
|
47
|
-
# @rbs return: ACP::Types::ListSessionsResponse | ACP::
|
|
48
|
-
def session_list: (ACP::Types::ListSessionsRequest request) -> (ACP::Types::ListSessionsResponse | ACP::
|
|
47
|
+
# @rbs return: ACP::Types::ListSessionsResponse | ACP::RequestError
|
|
48
|
+
def session_list: (ACP::Types::ListSessionsRequest request) -> (ACP::Types::ListSessionsResponse | ACP::RequestError)
|
|
49
49
|
|
|
50
50
|
# @rbs notification: ACP::Types::CancelNotification
|
|
51
51
|
# @rbs return: void
|
|
@@ -54,9 +54,9 @@ class ACP::ClientConnection
|
|
|
54
54
|
private
|
|
55
55
|
|
|
56
56
|
# @rbs type: ACP::AgentConnection::_Parser
|
|
57
|
-
# @rbs result: ACP::
|
|
57
|
+
# @rbs result: (Hash[String, untyped] | ACP::RequestError)
|
|
58
58
|
# @rbs return: untyped
|
|
59
|
-
def parse: (ACP::AgentConnection::_Parser type, ACP::
|
|
59
|
+
def parse: (ACP::AgentConnection::_Parser type, Hash[String, untyped] | ACP::RequestError result) -> untyped
|
|
60
60
|
|
|
61
61
|
# The request waits on its own thread so the caller's thread can yield each
|
|
62
62
|
# update as it arrives. The reader thread queues an update before it settles
|
|
@@ -66,8 +66,8 @@ class ACP::ClientConnection
|
|
|
66
66
|
# @rbs method: String
|
|
67
67
|
# @rbs params: Hash[String, untyped]
|
|
68
68
|
# @rbs &block: (ACP::Types::SessionUpdate::t) -> void
|
|
69
|
-
# @rbs return: ACP::
|
|
70
|
-
def stream: (String session_id, String method, Hash[String, untyped] params) { (ACP::Types::SessionUpdate::t) -> void } -> ACP::
|
|
69
|
+
# @rbs return: (Hash[String, untyped] | ACP::RequestError)
|
|
70
|
+
def stream: (String session_id, String method, Hash[String, untyped] params) { (ACP::Types::SessionUpdate::t) -> void } -> (Hash[String, untyped] | ACP::RequestError)
|
|
71
71
|
|
|
72
72
|
# Pushes under the lock so a stream cannot close its queue between the
|
|
73
73
|
# lookup and the push.
|
|
@@ -77,6 +77,6 @@ class ACP::ClientConnection
|
|
|
77
77
|
def dispatch: (untyped params) -> void
|
|
78
78
|
|
|
79
79
|
# @rbs params: untyped
|
|
80
|
-
# @rbs return: ACP::
|
|
81
|
-
def request_permission: (untyped params) -> ACP::
|
|
80
|
+
# @rbs return: (ACP::Types::RequestPermissionResponse | ACP::RequestError)
|
|
81
|
+
def request_permission: (untyped params) -> (ACP::Types::RequestPermissionResponse | ACP::RequestError)
|
|
82
82
|
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Generated from lib/acp/request_error.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
# The schema's JSON-RPC Error object, named after the official SDKs'
|
|
4
|
+
# RequestError: built by handlers and local refusals, and decoded from a
|
|
5
|
+
# peer's error replies by the transport.
|
|
6
|
+
class ACP::RequestError
|
|
7
|
+
PARSE_ERROR: Integer
|
|
8
|
+
|
|
9
|
+
INVALID_REQUEST: Integer
|
|
10
|
+
|
|
11
|
+
METHOD_NOT_FOUND: Integer
|
|
12
|
+
|
|
13
|
+
INVALID_PARAMS: Integer
|
|
14
|
+
|
|
15
|
+
INTERNAL_ERROR: Integer
|
|
16
|
+
|
|
17
|
+
REQUEST_CANCELLED: Integer
|
|
18
|
+
|
|
19
|
+
AUTH_REQUIRED: Integer
|
|
20
|
+
|
|
21
|
+
RESOURCE_NOT_FOUND: Integer
|
|
22
|
+
|
|
23
|
+
# @rbs code: Integer
|
|
24
|
+
# @rbs message: String
|
|
25
|
+
# @rbs data: untyped
|
|
26
|
+
# @rbs return: void
|
|
27
|
+
def initialize: (code: Integer, message: String, ?data: untyped) -> void
|
|
28
|
+
|
|
29
|
+
# @dynamic code
|
|
30
|
+
attr_reader code: Integer
|
|
31
|
+
|
|
32
|
+
# @dynamic message
|
|
33
|
+
attr_reader message: String
|
|
34
|
+
|
|
35
|
+
# @dynamic data
|
|
36
|
+
attr_reader data: untyped
|
|
37
|
+
|
|
38
|
+
# @rbs return: Hash[String, untyped]
|
|
39
|
+
def to_h: () -> Hash[String, untyped]
|
|
40
|
+
|
|
41
|
+
# @rbs return: ACP::RequestError
|
|
42
|
+
def self.parse_error: () -> ACP::RequestError
|
|
43
|
+
|
|
44
|
+
# @rbs return: ACP::RequestError
|
|
45
|
+
def self.invalid_request: () -> ACP::RequestError
|
|
46
|
+
|
|
47
|
+
# @rbs return: ACP::RequestError
|
|
48
|
+
def self.method_not_found: () -> ACP::RequestError
|
|
49
|
+
|
|
50
|
+
# @rbs return: ACP::RequestError
|
|
51
|
+
def self.invalid_params: () -> ACP::RequestError
|
|
52
|
+
|
|
53
|
+
# @rbs return: ACP::RequestError
|
|
54
|
+
def self.internal_error: () -> ACP::RequestError
|
|
55
|
+
|
|
56
|
+
# @rbs return: ACP::RequestError
|
|
57
|
+
def self.request_cancelled: () -> ACP::RequestError
|
|
58
|
+
|
|
59
|
+
# @rbs return: ACP::RequestError
|
|
60
|
+
def self.auth_required: () -> ACP::RequestError
|
|
61
|
+
|
|
62
|
+
# @rbs uri: String?
|
|
63
|
+
# @rbs return: ACP::RequestError
|
|
64
|
+
def self.resource_not_found: (?String? uri) -> ACP::RequestError
|
|
65
|
+
end
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# Generated from lib/acp/transport/reply.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# A request handler's
|
|
4
|
-
#
|
|
3
|
+
# A request handler's outcome plus a callback the transport runs once that
|
|
4
|
+
# outcome is on the wire, for messages the peer must only see after the reply.
|
|
5
5
|
class ACP::Transport::Reply
|
|
6
6
|
# @dynamic result
|
|
7
|
-
attr_reader result: ACP::Transport::
|
|
7
|
+
attr_reader result: ACP::Transport::Stdio::_ToH
|
|
8
8
|
|
|
9
9
|
# @dynamic after
|
|
10
10
|
attr_reader after: ^() -> void
|
|
11
11
|
|
|
12
|
-
# @rbs result: ACP::Transport::
|
|
12
|
+
# @rbs result: ACP::Transport::Stdio::_ToH
|
|
13
13
|
# @rbs after: ^() -> void
|
|
14
14
|
# @rbs return: void
|
|
15
|
-
def initialize: (ACP::Transport::
|
|
15
|
+
def initialize: (ACP::Transport::Stdio::_ToH result, after: ^() -> void) -> void
|
|
16
16
|
end
|
|
@@ -20,15 +20,7 @@ class ACP::Transport::Stdio
|
|
|
20
20
|
|
|
21
21
|
@input: _Reader
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
PARSE_ERROR: ACP::Transport::ResponseError
|
|
26
|
-
|
|
27
|
-
INVALID_REQUEST: ACP::Transport::ResponseError
|
|
28
|
-
|
|
29
|
-
METHOD_NOT_FOUND: ACP::Transport::ResponseError
|
|
30
|
-
|
|
31
|
-
CONNECTION_CLOSED: ACP::Transport::ResponseError
|
|
23
|
+
CONNECTION_CLOSED: ACP::RequestError
|
|
32
24
|
|
|
33
25
|
# @rbs input: _Reader
|
|
34
26
|
# @rbs output: _Writer
|
|
@@ -45,8 +37,8 @@ class ACP::Transport::Stdio
|
|
|
45
37
|
|
|
46
38
|
# @rbs method: String
|
|
47
39
|
# @rbs params: untyped
|
|
48
|
-
# @rbs return: ACP::
|
|
49
|
-
def request: (String method, ?untyped params) -> ACP::
|
|
40
|
+
# @rbs return: (Hash[String, untyped] | ACP::RequestError)
|
|
41
|
+
def request: (String method, ?untyped params) -> (Hash[String, untyped] | ACP::RequestError)
|
|
50
42
|
|
|
51
43
|
# @rbs method: String
|
|
52
44
|
# @rbs params: untyped
|
|
@@ -68,8 +60,8 @@ class ACP::Transport::Stdio
|
|
|
68
60
|
def route: (Hash[String, untyped] message, Hash[String, _Handler] requests, Hash[String, _NotificationHandler] notifications) -> void
|
|
69
61
|
|
|
70
62
|
# @rbs line: String
|
|
71
|
-
# @rbs return: Hash[String, untyped] | ACP::
|
|
72
|
-
def parse: (String line) -> (Hash[String, untyped] | ACP::
|
|
63
|
+
# @rbs return: Hash[String, untyped] | ACP::RequestError
|
|
64
|
+
def parse: (String line) -> (Hash[String, untyped] | ACP::RequestError)
|
|
73
65
|
|
|
74
66
|
# @rbs handler: _Handler?
|
|
75
67
|
# @rbs id: untyped
|
|
@@ -90,22 +82,25 @@ class ACP::Transport::Stdio
|
|
|
90
82
|
#
|
|
91
83
|
# @rbs handler: _Handler
|
|
92
84
|
# @rbs params: untyped
|
|
93
|
-
# @rbs return: ACP::
|
|
94
|
-
def invoke: (_Handler handler, untyped params) -> (ACP::
|
|
85
|
+
# @rbs return: (_ToH | ACP::RequestError | ACP::Transport::Reply)
|
|
86
|
+
def invoke: (_Handler handler, untyped params) -> (_ToH | ACP::RequestError | ACP::Transport::Reply)
|
|
95
87
|
|
|
88
|
+
# The success arm is whatever the handler returned, which the transport only
|
|
89
|
+
# knows serializes with to_h; RequestError picks the error arm of the reply.
|
|
90
|
+
#
|
|
96
91
|
# @rbs id: untyped
|
|
97
|
-
# @rbs
|
|
92
|
+
# @rbs outcome: (_ToH | ACP::RequestError)
|
|
98
93
|
# @rbs return: void
|
|
99
|
-
def reply: (untyped id, ACP::
|
|
94
|
+
def reply: (untyped id, _ToH | ACP::RequestError outcome) -> void
|
|
100
95
|
|
|
101
96
|
# @rbs queue: Thread::Queue
|
|
102
97
|
# @rbs return: Integer?
|
|
103
98
|
def register: (Thread::Queue queue) -> Integer?
|
|
104
99
|
|
|
105
100
|
# @rbs id: untyped
|
|
106
|
-
# @rbs result: ACP::
|
|
101
|
+
# @rbs result: (Hash[String, untyped] | ACP::RequestError)
|
|
107
102
|
# @rbs return: void
|
|
108
|
-
def settle: (untyped id, ACP::
|
|
103
|
+
def settle: (untyped id, Hash[String, untyped] | ACP::RequestError result) -> void
|
|
109
104
|
|
|
110
105
|
# @rbs return: void
|
|
111
106
|
def close: () -> void
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
class ACP::AgentConnection
|
|
2
2
|
interface _Agent
|
|
3
|
-
def new_session: (ACP::Types::NewSessionRequest) -> (ACP::Types::NewSessionResponse | ACP::
|
|
4
|
-
def prompt: (ACP::Types::PromptRequest) -> (ACP::Types::PromptResponse | ACP::
|
|
3
|
+
def new_session: (ACP::Types::NewSessionRequest) -> (ACP::Types::NewSessionResponse | ACP::RequestError)
|
|
4
|
+
def prompt: (ACP::Types::PromptRequest) -> (ACP::Types::PromptResponse | ACP::RequestError)
|
|
5
5
|
# Runs on the transport's reader thread, so it must return quickly.
|
|
6
6
|
def cancel: (ACP::Types::CancelNotification) -> void
|
|
7
7
|
# AgentConnection probes for the optional methods below.
|
|
@@ -9,11 +9,53 @@ class ACP::AgentConnection
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
interface _LoadSession
|
|
12
|
-
def load_session: (ACP::Types::LoadSessionRequest) -> (ACP::Types::LoadSessionResponse | ACP::
|
|
12
|
+
def load_session: (ACP::Types::LoadSessionRequest) -> (ACP::Types::LoadSessionResponse | ACP::RequestError)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
interface _ListSessions
|
|
16
|
-
def list_sessions: (ACP::Types::ListSessionsRequest) -> (ACP::Types::ListSessionsResponse | ACP::
|
|
16
|
+
def list_sessions: (ACP::Types::ListSessionsRequest) -> (ACP::Types::ListSessionsResponse | ACP::RequestError)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
interface _Authenticate
|
|
20
|
+
def authenticate: (ACP::Types::AuthenticateRequest) -> (ACP::Types::AuthenticateResponse | ACP::RequestError)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
interface _ResumeSession
|
|
24
|
+
def resume_session: (ACP::Types::ResumeSessionRequest) -> (ACP::Types::ResumeSessionResponse | ACP::RequestError)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
interface _CloseSession
|
|
28
|
+
def close_session: (ACP::Types::CloseSessionRequest) -> (ACP::Types::CloseSessionResponse | ACP::RequestError)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
interface _DeleteSession
|
|
32
|
+
def delete_session: (ACP::Types::DeleteSessionRequest) -> (ACP::Types::DeleteSessionResponse | ACP::RequestError)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
interface _ChangeSessionMode
|
|
36
|
+
def change_session_mode: (ACP::Types::SetSessionModeRequest) -> (ACP::Types::SetSessionModeResponse | ACP::RequestError)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
interface _ChangeSessionConfigOption
|
|
40
|
+
def change_session_config_option: (ACP::Types::SetSessionConfigOptionRequest) -> (ACP::Types::SetSessionConfigOptionResponse | ACP::RequestError)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
interface _FullAgent
|
|
44
|
+
include _Agent
|
|
45
|
+
include _LoadSession
|
|
46
|
+
include _ListSessions
|
|
47
|
+
include _Authenticate
|
|
48
|
+
include _ResumeSession
|
|
49
|
+
include _CloseSession
|
|
50
|
+
include _DeleteSession
|
|
51
|
+
include _ChangeSessionMode
|
|
52
|
+
include _ChangeSessionConfigOption
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
interface _OptionalMethod
|
|
56
|
+
def rpc_method: () -> String
|
|
57
|
+
def agent_method: () -> Symbol
|
|
58
|
+
def advertised?: (ACP::Types::InitializeResponse) -> bool
|
|
17
59
|
end
|
|
18
60
|
|
|
19
61
|
interface _SessionCreated
|
|
@@ -24,12 +66,19 @@ class ACP::AgentConnection
|
|
|
24
66
|
interface _Client
|
|
25
67
|
def update: (String session_id, ACP::Types::SessionUpdate::t update) -> void
|
|
26
68
|
def available_commands: (String session_id, Array[ACP::Types::AvailableCommand] commands) -> void
|
|
27
|
-
def request_permission: (ACP::Types::RequestPermissionRequest) -> (ACP::Types::RequestPermissionResponse | ACP::
|
|
69
|
+
def request_permission: (ACP::Types::RequestPermissionRequest) -> (ACP::Types::RequestPermissionResponse | ACP::RequestError)
|
|
70
|
+
def read_text_file: (ACP::Types::ReadTextFileRequest) -> (ACP::Types::ReadTextFileResponse | ACP::RequestError)
|
|
71
|
+
def write_text_file: (ACP::Types::WriteTextFileRequest) -> (ACP::Types::WriteTextFileResponse | ACP::RequestError)
|
|
72
|
+
def create_terminal: (ACP::Types::CreateTerminalRequest) -> (ACP::Types::CreateTerminalResponse | ACP::RequestError)
|
|
73
|
+
def terminal_output: (ACP::Types::TerminalOutputRequest) -> (ACP::Types::TerminalOutputResponse | ACP::RequestError)
|
|
74
|
+
def wait_for_terminal_exit: (ACP::Types::WaitForTerminalExitRequest) -> (ACP::Types::WaitForTerminalExitResponse | ACP::RequestError)
|
|
75
|
+
def kill_terminal: (ACP::Types::KillTerminalRequest) -> (ACP::Types::KillTerminalResponse | ACP::RequestError)
|
|
76
|
+
def release_terminal: (ACP::Types::ReleaseTerminalRequest) -> (ACP::Types::ReleaseTerminalResponse | ACP::RequestError)
|
|
28
77
|
def capabilities: () -> ACP::Types::ClientCapabilities?
|
|
29
78
|
end
|
|
30
79
|
|
|
31
80
|
interface _Peer
|
|
32
|
-
def request: (String method, ?untyped params) -> ACP::
|
|
81
|
+
def request: (String method, ?untyped params) -> (Hash[String, untyped] | ACP::RequestError)
|
|
33
82
|
def notify: (String method, ?untyped params) -> void
|
|
34
83
|
end
|
|
35
84
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
class ACP::ClientConnection
|
|
2
2
|
interface _PermissionHandler
|
|
3
3
|
# Runs on its own thread, so it may block while the user decides.
|
|
4
|
-
def call: (ACP::Types::RequestPermissionRequest) -> (ACP::Types::RequestPermissionResponse | ACP::
|
|
4
|
+
def call: (ACP::Types::RequestPermissionRequest) -> (ACP::Types::RequestPermissionResponse | ACP::RequestError)
|
|
5
5
|
end
|
|
6
6
|
|
|
7
7
|
# Receives the session/update notifications that arrive outside a
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
class ACP::Transport::Stdio
|
|
2
|
+
# The success arm of a request handler's return: the transport serializes it
|
|
3
|
+
# with to_h into the reply's result.
|
|
4
|
+
interface _ToH
|
|
5
|
+
def to_h: () -> Hash[String, untyped]
|
|
6
|
+
end
|
|
7
|
+
|
|
2
8
|
interface _Reader
|
|
3
9
|
def each_line: () { (String) -> void } -> untyped
|
|
4
10
|
end
|
|
@@ -9,7 +15,7 @@ class ACP::Transport::Stdio
|
|
|
9
15
|
end
|
|
10
16
|
|
|
11
17
|
interface _Handler
|
|
12
|
-
def call: (untyped params) -> (ACP::
|
|
18
|
+
def call: (untyped params) -> (_ToH | ACP::RequestError | ACP::Transport::Reply)
|
|
13
19
|
end
|
|
14
20
|
|
|
15
21
|
interface _NotificationHandler
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: acp-sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jake Bottrall
|
|
@@ -23,8 +23,6 @@ dependencies:
|
|
|
23
23
|
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
25
|
version: '2.8'
|
|
26
|
-
description: An Agent Client Protocol (ACP) server for exposing agents and a client
|
|
27
|
-
for driving them.
|
|
28
26
|
email:
|
|
29
27
|
- jakebottrall@gmail.com
|
|
30
28
|
executables: []
|
|
@@ -37,13 +35,20 @@ files:
|
|
|
37
35
|
- lib/acp/agent_connection.rb
|
|
38
36
|
- lib/acp/agent_connection/client.rb
|
|
39
37
|
- lib/acp/agent_connection/optional_method.rb
|
|
38
|
+
- lib/acp/agent_connection/optional_method/authenticate.rb
|
|
39
|
+
- lib/acp/agent_connection/optional_method/close_session.rb
|
|
40
|
+
- lib/acp/agent_connection/optional_method/delete_session.rb
|
|
41
|
+
- lib/acp/agent_connection/optional_method/list_sessions.rb
|
|
42
|
+
- lib/acp/agent_connection/optional_method/load_session.rb
|
|
43
|
+
- lib/acp/agent_connection/optional_method/resume_session.rb
|
|
44
|
+
- lib/acp/agent_process.rb
|
|
40
45
|
- lib/acp/client_connection.rb
|
|
46
|
+
- lib/acp/request_error.rb
|
|
41
47
|
- lib/acp/sdk.rb
|
|
42
48
|
- lib/acp/transport.rb
|
|
43
49
|
- lib/acp/transport/reply.rb
|
|
44
|
-
- lib/acp/transport/response_error.rb
|
|
45
|
-
- lib/acp/transport/result.rb
|
|
46
50
|
- lib/acp/transport/stdio.rb
|
|
51
|
+
- lib/acp/types.rb
|
|
47
52
|
- lib/acp/types/agent_auth_capabilities.rb
|
|
48
53
|
- lib/acp/types/agent_capabilities.rb
|
|
49
54
|
- lib/acp/types/annotations.rb
|
|
@@ -243,13 +248,20 @@ files:
|
|
|
243
248
|
- sig/generated/acp/agent_connection.rbs
|
|
244
249
|
- sig/generated/acp/agent_connection/client.rbs
|
|
245
250
|
- sig/generated/acp/agent_connection/optional_method.rbs
|
|
251
|
+
- sig/generated/acp/agent_connection/optional_method/authenticate.rbs
|
|
252
|
+
- sig/generated/acp/agent_connection/optional_method/close_session.rbs
|
|
253
|
+
- sig/generated/acp/agent_connection/optional_method/delete_session.rbs
|
|
254
|
+
- sig/generated/acp/agent_connection/optional_method/list_sessions.rbs
|
|
255
|
+
- sig/generated/acp/agent_connection/optional_method/load_session.rbs
|
|
256
|
+
- sig/generated/acp/agent_connection/optional_method/resume_session.rbs
|
|
257
|
+
- sig/generated/acp/agent_process.rbs
|
|
246
258
|
- sig/generated/acp/client_connection.rbs
|
|
259
|
+
- sig/generated/acp/request_error.rbs
|
|
247
260
|
- sig/generated/acp/sdk.rbs
|
|
248
261
|
- sig/generated/acp/transport.rbs
|
|
249
262
|
- sig/generated/acp/transport/reply.rbs
|
|
250
|
-
- sig/generated/acp/transport/response_error.rbs
|
|
251
|
-
- sig/generated/acp/transport/result.rbs
|
|
252
263
|
- sig/generated/acp/transport/stdio.rbs
|
|
264
|
+
- sig/generated/acp/types.rbs
|
|
253
265
|
- sig/generated/acp/types/agent_auth_capabilities.rbs
|
|
254
266
|
- sig/generated/acp/types/agent_capabilities.rbs
|
|
255
267
|
- sig/generated/acp/types/annotations.rbs
|
|
@@ -447,9 +459,15 @@ files:
|
|
|
447
459
|
- sig/generated/acp/types/write_text_file_response.rbs
|
|
448
460
|
- sig/generated/acp/version.rbs
|
|
449
461
|
- sig/manual/acp/agent_connection.rbs
|
|
462
|
+
- sig/manual/acp/agent_connection/optional_method/authenticate.rbs
|
|
463
|
+
- sig/manual/acp/agent_connection/optional_method/close_session.rbs
|
|
464
|
+
- sig/manual/acp/agent_connection/optional_method/delete_session.rbs
|
|
465
|
+
- sig/manual/acp/agent_connection/optional_method/list_sessions.rbs
|
|
466
|
+
- sig/manual/acp/agent_connection/optional_method/load_session.rbs
|
|
467
|
+
- sig/manual/acp/agent_connection/optional_method/resume_session.rbs
|
|
468
|
+
- sig/manual/acp/agent_process.rbs
|
|
450
469
|
- sig/manual/acp/client_connection.rbs
|
|
451
470
|
- sig/manual/acp/transport/stdio.rbs
|
|
452
|
-
- sig/manual/acp/types.rbs
|
|
453
471
|
homepage: https://github.com/bottrall/acp-sdk
|
|
454
472
|
licenses:
|
|
455
473
|
- MIT
|