Skip to content

Commit eb83e01

Browse files
committed
Fix compilation in tests and samples
1 parent 20d99fb commit eb83e01

9 files changed

Lines changed: 238 additions & 113 deletions

File tree

kotlin/kotlin-acp/src/commonTest/kotlin/io/agentclientprotocol/ClientSideConnectionTest.kt

Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import io.agentclientprotocol.client.ClientSideConnection
55
import io.agentclientprotocol.mock.MockClient
66
import io.agentclientprotocol.mock.TestTransport
77
import io.agentclientprotocol.model.*
8+
import io.agentclientprotocol.rpc.ACPJson
89
import kotlinx.coroutines.async
910
import kotlinx.coroutines.delay
1011
import kotlinx.coroutines.test.runTest
@@ -17,12 +18,12 @@ class ClientSideConnectionTest {
1718
private lateinit var clientConnection: ClientSideConnection
1819

1920
@BeforeTest
20-
fun setup() {
21+
fun setup() = runTest {
2122
mockClient = MockClient()
2223
val (transport1, transport2) = TestTransport.createPair()
2324
clientTransport = transport1
2425
agentTransport = transport2
25-
clientConnection = ClientSideConnection(mockClient)
26+
clientConnection = ClientSideConnection(this, clientTransport, mockClient)
2627
}
2728

2829
@AfterTest
@@ -36,7 +37,7 @@ class ClientSideConnectionTest {
3637
@Test
3738
fun `test connection establishment`() = runTest {
3839
// When
39-
clientConnection.start(clientTransport)
40+
clientConnection.start()
4041

4142
// Then
4243
assertTrue(clientTransport.isConnected)
@@ -48,7 +49,7 @@ class ClientSideConnectionTest {
4849
@Test
4950
fun `test initialize method sends correct request and handles response`() = runTest {
5051
// Given
51-
clientConnection.start(clientTransport)
52+
clientConnection.start()
5253
clientTransport.start()
5354
agentTransport.start()
5455

@@ -82,7 +83,7 @@ class ClientSideConnectionTest {
8283
@Test
8384
fun `test authenticate method sends correct request`() = runTest {
8485
// Given
85-
clientConnection.start(clientTransport)
86+
clientConnection.start()
8687
clientTransport.start()
8788
agentTransport.start()
8889

@@ -105,7 +106,7 @@ class ClientSideConnectionTest {
105106
@Test
106107
fun `test newSession method sends correct request and handles response`() = runTest {
107108
// Given
108-
clientConnection.start(clientTransport)
109+
clientConnection.start()
109110
clientTransport.start()
110111
agentTransport.start()
111112

@@ -118,7 +119,7 @@ class ClientSideConnectionTest {
118119

119120
// When
120121
val resultDeferred = async {
121-
clientConnection.newSession(request)
122+
clientConnection.sessionNew(request)
122123
}
123124

124125
// Simulate agent responding
@@ -134,7 +135,7 @@ class ClientSideConnectionTest {
134135
@Test
135136
fun `test loadSession method sends correct request`() = runTest {
136137
// Given
137-
clientConnection.start(clientTransport)
138+
clientConnection.start()
138139
clientTransport.start()
139140
agentTransport.start()
140141

@@ -146,7 +147,7 @@ class ClientSideConnectionTest {
146147

147148
// When
148149
val resultDeferred = async {
149-
clientConnection.loadSession(request)
150+
clientConnection.sessionLoad(request)
150151
}
151152

152153
// Simulate agent responding with success
@@ -161,7 +162,7 @@ class ClientSideConnectionTest {
161162
@Test
162163
fun `test prompt method sends correct request and handles response`() = runTest {
163164
// Given
164-
clientConnection.start(clientTransport)
165+
clientConnection.start()
165166
clientTransport.start()
166167
agentTransport.start()
167168

@@ -174,7 +175,7 @@ class ClientSideConnectionTest {
174175

175176
// When
176177
val resultDeferred = async {
177-
clientConnection.prompt(request)
178+
clientConnection.sessionPrompt(request)
178179
}
179180

180181
// Simulate agent responding
@@ -189,14 +190,14 @@ class ClientSideConnectionTest {
189190
@Test
190191
fun `test cancel method sends notification`() = runTest {
191192
// Given
192-
clientConnection.start(clientTransport)
193+
clientConnection.start()
193194
clientTransport.start()
194195
agentTransport.start()
195196

196197
val notification = CancelNotification(SessionId("test-session"))
197198

198199
// When
199-
clientConnection.cancel(notification)
200+
clientConnection.sessionCancel(notification)
200201

201202
// Then - notification should be sent without waiting for response
202203
// This is a fire-and-forget operation
@@ -207,7 +208,7 @@ class ClientSideConnectionTest {
207208
@Test
208209
fun `test readTextFile handler calls client and returns response`() = runTest {
209210
// Given
210-
clientConnection.start(clientTransport)
211+
clientConnection.start()
211212
clientTransport.start()
212213
agentTransport.start()
213214

@@ -219,7 +220,7 @@ class ClientSideConnectionTest {
219220
path = "/test/file.txt"
220221
)
221222

222-
// When - simulate agent sending readTextFile request
223+
// When - simulate agent sending fsReadTextFile request
223224
val requestJson = """{"jsonrpc":"2.0","id":42,"method":"fs/read_text_file","params":${
224225
ACPJson.encodeToString(
225226
ReadTextFileRequest.serializer(), request)}}"""
@@ -237,7 +238,7 @@ class ClientSideConnectionTest {
237238
@Test
238239
fun `test writeTextFile handler calls client`() = runTest {
239240
// Given
240-
clientConnection.start(clientTransport)
241+
clientConnection.start()
241242
clientTransport.start()
242243
agentTransport.start()
243244

@@ -247,7 +248,7 @@ class ClientSideConnectionTest {
247248
content = "new content"
248249
)
249250

250-
// When - simulate agent sending writeTextFile request
251+
// When - simulate agent sending fsWriteTextFile request
251252
val requestJson = """{"jsonrpc":"2.0","id":43,"method":"fs/write_text_file","params":${
252253
ACPJson.encodeToString(
253254
WriteTextFileRequest.serializer(), request)}}"""
@@ -265,7 +266,7 @@ class ClientSideConnectionTest {
265266
@Test
266267
fun `test requestPermission handler calls client and returns response`() = runTest {
267268
// Given
268-
clientConnection.start(clientTransport)
269+
clientConnection.start()
269270
clientTransport.start()
270271
agentTransport.start()
271272

@@ -291,7 +292,7 @@ class ClientSideConnectionTest {
291292
val expectedOutcome = RequestPermissionOutcome.Selected(PermissionOptionId("allow"))
292293
mockClient.requestPermissionResult = RequestPermissionResponse(expectedOutcome)
293294

294-
// When - simulate agent sending requestPermission request
295+
// When - simulate agent sending sessionRequestPermission request
295296
val requestJson = """{"jsonrpc":"2.0","id":44,"method":"session/request_permission","params":${
296297
ACPJson.encodeToString(
297298
RequestPermissionRequest.serializer(), request)}}"""
@@ -309,7 +310,7 @@ class ClientSideConnectionTest {
309310
@Test
310311
fun `test sessionUpdate handler calls client`() = runTest {
311312
// Given
312-
clientConnection.start(clientTransport)
313+
clientConnection.start()
313314
clientTransport.start()
314315
agentTransport.start()
315316

@@ -343,7 +344,7 @@ class ClientSideConnectionTest {
343344
@Test
344345
fun `test initialize method handles JSON-RPC error response`() = runTest {
345346
// Given
346-
clientConnection.start(clientTransport)
347+
clientConnection.start()
347348
clientTransport.start()
348349
agentTransport.start()
349350

@@ -367,31 +368,48 @@ class ClientSideConnectionTest {
367368
@Test
368369
fun `test client method exception propagates to agent`() = runTest {
369370
// Given
370-
clientConnection.start(clientTransport)
371+
clientConnection.start()
371372
clientTransport.start()
372373
agentTransport.start()
373374

374375
// Configure mock to throw exception
375376
val testClient = object : Client {
376-
override suspend fun readTextFile(request: ReadTextFileRequest): ReadTextFileResponse {
377+
override suspend fun fsReadTextFile(request: ReadTextFileRequest): ReadTextFileResponse {
377378
throw RuntimeException("File not found")
378379
}
379-
override suspend fun writeTextFile(request: WriteTextFileRequest) {}
380-
override suspend fun requestPermission(request: RequestPermissionRequest): RequestPermissionResponse {
380+
override suspend fun fsWriteTextFile(request: WriteTextFileRequest): WriteTextFileResponse {
381+
throw RuntimeException("Write failed")
382+
}
383+
override suspend fun sessionRequestPermission(request: RequestPermissionRequest): RequestPermissionResponse {
381384
return RequestPermissionResponse(RequestPermissionOutcome.Cancelled)
382385
}
383386
override suspend fun sessionUpdate(notification: SessionNotification) {}
387+
override suspend fun terminalCreate(request: CreateTerminalRequest): CreateTerminalResponse {
388+
throw RuntimeException("Terminal not supported")
389+
}
390+
override suspend fun terminalOutput(request: TerminalOutputRequest): TerminalOutputResponse {
391+
throw RuntimeException("Terminal not supported")
392+
}
393+
override suspend fun terminalRelease(request: ReleaseTerminalRequest): ReleaseTerminalResponse {
394+
throw RuntimeException("Terminal not supported")
395+
}
396+
override suspend fun terminalWaitForExit(request: WaitForTerminalExitRequest): WaitForTerminalExitResponse {
397+
throw RuntimeException("Terminal not supported")
398+
}
399+
override suspend fun terminalKill(request: KillTerminalCommandRequest): KillTerminalCommandResponse {
400+
throw RuntimeException("Terminal not supported")
401+
}
384402
}
385403

386-
val connectionWithFailingClient = ClientSideConnection(testClient)
387-
connectionWithFailingClient.start(agentTransport)
404+
val connectionWithFailingClient = ClientSideConnection(this, agentTransport, testClient)
405+
connectionWithFailingClient.start()
388406

389407
val request = ReadTextFileRequest(
390408
sessionId = SessionId("test-session"),
391409
path = "/nonexistent/file.txt"
392410
)
393411

394-
// When - simulate agent sending readTextFile request
412+
// When - simulate agent sending fsReadTextFile request
395413
val requestJson = """{"jsonrpc":"2.0","id":42,"method":"fs/read_text_file","params":${
396414
ACPJson.encodeToString(
397415
ReadTextFileRequest.serializer(), request)}}"""
@@ -408,7 +426,7 @@ class ClientSideConnectionTest {
408426
@Test
409427
fun `test transport disconnection during operation`() = runTest {
410428
// Given
411-
clientConnection.start(clientTransport)
429+
clientConnection.start()
412430
clientTransport.start()
413431
agentTransport.start()
414432

@@ -434,7 +452,7 @@ class ClientSideConnectionTest {
434452
@Test
435453
fun `test full request-response cycle with real JSON serialization`() = runTest {
436454
// Given
437-
clientConnection.start(clientTransport)
455+
clientConnection.start()
438456
clientTransport.start()
439457
agentTransport.start()
440458

@@ -472,7 +490,7 @@ class ClientSideConnectionTest {
472490
val expectedSessionResponse = NewSessionResponse(SessionId("new-session-123"))
473491

474492
val sessionDeferred = async {
475-
clientConnection.newSession(sessionRequest)
493+
clientConnection.sessionNew(sessionRequest)
476494
}
477495

478496
val sessionResponseJson = """{"jsonrpc":"2.0","id":2,"result":${ACPJson.encodeToString(NewSessionResponse.serializer(), expectedSessionResponse)}}"""
@@ -488,7 +506,7 @@ class ClientSideConnectionTest {
488506
@Test
489507
fun `test concurrent requests handling`() = runTest {
490508
// Given
491-
clientConnection.start(clientTransport)
509+
clientConnection.start()
492510
clientTransport.start()
493511
agentTransport.start()
494512

@@ -500,7 +518,7 @@ class ClientSideConnectionTest {
500518

501519
// When - send concurrent requests
502520
val deferred1 = async { clientConnection.initialize(request1) }
503-
val deferred2 = async { clientConnection.newSession(request2) }
521+
val deferred2 = async { clientConnection.sessionNew(request2) }
504522

505523
// Respond to both requests (order shouldn't matter due to ID correlation)
506524
val response1Json = """{"jsonrpc":"2.0","id":1,"result":${ACPJson.encodeToString(InitializeResponse.serializer(), response1)}}"""
@@ -521,7 +539,7 @@ class ClientSideConnectionTest {
521539
@Test
522540
fun `test bidirectional communication with file operations`() = runTest {
523541
// Given
524-
clientConnection.start(clientTransport)
542+
clientConnection.start()
525543
clientTransport.start()
526544
agentTransport.start()
527545

@@ -545,7 +563,7 @@ class ClientSideConnectionTest {
545563
assertEquals(1, mockClient.readTextFileCalls.size)
546564
assertEquals("/test/hello.txt", mockClient.readTextFileCalls[0].path)
547565

548-
// When - client sends prompt request
566+
// When - client sends sessionPrompt request
549567
val promptRequest = PromptRequest(
550568
sessionId = SessionId("test-session"),
551569
prompt = listOf(ContentBlock.Text("Process the file content"))
@@ -554,7 +572,7 @@ class ClientSideConnectionTest {
554572
val promptResponse = PromptResponse(StopReason.END_TURN)
555573

556574
val promptDeferred = async {
557-
clientConnection.prompt(promptRequest)
575+
clientConnection.sessionPrompt(promptRequest)
558576
}
559577

560578
val promptResponseJson = """{"jsonrpc":"2.0","id":3,"result":${ACPJson.encodeToString(PromptResponse.serializer(), promptResponse)}}"""

kotlin/kotlin-acp/src/commonTest/kotlin/io/agentclientprotocol/SimpleConnectionTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@ class SimpleConnectionTest {
1212
// Given
1313
val mockClient = MockClient()
1414
val (clientTransport, agentTransport) = TestTransport.createPair()
15-
val clientConnection = ClientSideConnection(mockClient)
16-
15+
val clientConnection = ClientSideConnection(this, clientTransport, mockClient)
16+
1717
// When
18-
clientConnection.start(clientTransport)
18+
clientConnection.start()
1919
clientTransport.start()
2020
agentTransport.start()
21-
21+
2222
// Then
2323
assertTrue(clientTransport.isConnected)
2424
assertTrue(agentTransport.isConnected)
25-
25+
2626
// Cleanup
2727
clientTransport.close()
2828
agentTransport.close()

0 commit comments

Comments
 (0)