Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,18 @@ import com.agentclientprotocol.protocol.Protocol
import com.agentclientprotocol.protocol.ProtocolOptions
import io.ktor.client.*
import io.ktor.client.plugins.websocket.*
import io.ktor.client.request.HttpRequestBuilder
import io.ktor.client.request.*

/**
* Create a new [Protocol] on a websocket via [HttpClient].
*
* The protocol should be started manually by the calling site.
*/
public suspend fun HttpClient.acpProtocolOnClientWebSocket(url: String = ACP_PATH, protocolOptions: ProtocolOptions, requestBuilder: HttpRequestBuilder.() -> Unit = {}): Protocol {
public suspend fun HttpClient.acpProtocolOnClientWebSocket(
url: String = ACP_PATH,
protocolOptions: ProtocolOptions,
requestBuilder: HttpRequestBuilder.() -> Unit = {}
): Protocol {
val webSocketSession = webSocketSession(urlString = url, block = requestBuilder)
val webSocketTransport = WebSocketTransport(parentScope = webSocketSession, wss = webSocketSession)
val protocol = Protocol(parentScope = webSocketSession, transport = webSocketTransport, options = protocolOptions)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ import kotlinx.coroutines.awaitCancellation
* When [block] exits the websocket connection is closed.
*/
@KtorDsl
public fun Route.acpProtocolOnServerWebSocket(path: String = ACP_PATH, protocolOptions: ProtocolOptions, block: suspend (Protocol) -> Unit) {
public fun Route.acpProtocolOnServerWebSocket(
path: String = ACP_PATH,
protocolOptions: ProtocolOptions,
block: suspend (Protocol) -> Unit
) {
webSocket(path) {
val webSocketTransport = WebSocketTransport(parentScope = this, wss = this)
val protocol = Protocol(parentScope = this, transport = webSocketTransport, options = protocolOptions)
Expand All @@ -29,7 +33,12 @@ public fun Route.acpProtocolOnServerWebSocket(path: String = ACP_PATH, protocolO
* When [block] exits the websocket connection is closed.
*/
@KtorDsl
public fun Application.acpProtocolOnServerWebSocket(path: String = ACP_PATH, protocolOptions: ProtocolOptions, withAuth: (Route.(Route.() -> Unit) -> Unit)?, block: suspend (Protocol) -> Unit) {
public fun Application.acpProtocolOnServerWebSocket(
path: String = ACP_PATH,
protocolOptions: ProtocolOptions,
withAuth: (Route.(Route.() -> Unit) -> Unit)?,
block: suspend (Protocol) -> Unit
) {
routing {
if (withAuth != null) {
withAuth {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.agentclientprotocol

import com.agentclientprotocol.agent.Agent
import com.agentclientprotocol.agent.AgentInfo
import com.agentclientprotocol.agent.AgentSession
import com.agentclientprotocol.agent.AgentSupport
import com.agentclientprotocol.agent.client
import com.agentclientprotocol.client.*
import com.agentclientprotocol.common.*
import com.agentclientprotocol.agent.*
import com.agentclientprotocol.client.Client
import com.agentclientprotocol.client.ClientInfo
import com.agentclientprotocol.common.ClientSessionOperations
import com.agentclientprotocol.common.Event
import com.agentclientprotocol.common.FileSystemOperations
import com.agentclientprotocol.common.SessionCreationParameters
import com.agentclientprotocol.framework.ProtocolDriver
import com.agentclientprotocol.model.*
import kotlinx.coroutines.currentCoroutineContext
Expand All @@ -15,9 +15,12 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.flow
import kotlinx.serialization.json.JsonElement
import kotlin.test.*
import kotlin.test.Test
import kotlin.test.assertContentEquals
import kotlin.test.assertEquals
import kotlin.test.assertTrue

open class TestClientSessionOperations(): ClientSessionOperations {
open class TestClientSessionOperations : ClientSessionOperations {
override suspend fun requestPermissions(
toolCall: SessionUpdate.ToolCallUpdate,
permissions: List<PermissionOption>,
Expand All @@ -42,7 +45,10 @@ open class TestAgentSession(override val sessionId: SessionId = SessionId("test-
}
}

class TestAgentSupport(val capabilities: AgentCapabilities = AgentCapabilities(), val createSessionFunc: suspend (SessionCreationParameters) -> AgentSession) : AgentSupport {
class TestAgentSupport(
val capabilities: AgentCapabilities = AgentCapabilities(),
val createSessionFunc: suspend (SessionCreationParameters) -> AgentSession
) : AgentSupport {
val agentInitialized = kotlinx.coroutines.CompletableDeferred<ClientInfo>()

override suspend fun initialize(clientInfo: ClientInfo): AgentInfo {
Expand Down Expand Up @@ -121,7 +127,10 @@ abstract class FeaturesTest(protocolDriver: ProtocolDriver) : ProtocolDriver by
fun `change mode from client`() = testWithProtocols { clientProtocol, agentProtocol ->
val client = Client(protocol = clientProtocol)

val modes = listOf(SessionMode(SessionModeId("ask"), "Ask mode", "Only conversations"), SessionMode(SessionModeId("Code"), "Coding mode", "Writes code"))
val modes = listOf(
SessionMode(SessionModeId("ask"), "Ask mode", "Only conversations"),
SessionMode(SessionModeId("Code"), "Coding mode", "Writes code")
)

val agentSupport = TestAgentSupport {
object : TestAgentSession() {
Expand Down Expand Up @@ -191,7 +200,6 @@ abstract class FeaturesTest(protocolDriver: ProtocolDriver) : ProtocolDriver by
}



// @Test
// fun `call agent extension from client`(): TestResult = testWithProtocols { clientProtocol, agentProtocol ->
//
Expand Down
Loading