From 7b2946300f27d807a596c69b568fe0e92dfc23f3 Mon Sep 17 00:00:00 2001 From: Evgeniy Stepanov Date: Tue, 21 Apr 2026 09:14:49 +0300 Subject: [PATCH 1/2] Implement RFD about LLM providers --- .../agentclientprotocol/SimpleAgentTest.kt | 82 +++++ acp-model/.schema-checksums | 8 +- acp-model/.schema-revision | 2 +- acp-model/SCHEMA_VERSION.md | 48 ++- acp-model/api/acp-model.api | 336 +++++++++++++++++- .../agentclientprotocol/model/Capabilities.kt | 19 +- .../com/agentclientprotocol/model/Methods.kt | 6 + .../com/agentclientprotocol/model/Requests.kt | 140 ++++++++ .../model/ProvidersSerializationTest.kt | 140 ++++++++ acp/api/acp.api | 15 + .../com/agentclientprotocol/agent/Agent.kt | 15 + .../agentclientprotocol/agent/AgentSupport.kt | 62 +++- .../com/agentclientprotocol/client/Client.kt | 51 +++ 13 files changed, 887 insertions(+), 37 deletions(-) create mode 100644 acp-model/src/commonTest/kotlin/com/agentclientprotocol/model/ProvidersSerializationTest.kt diff --git a/acp-ktor-test/src/commonTest/kotlin/com/agentclientprotocol/SimpleAgentTest.kt b/acp-ktor-test/src/commonTest/kotlin/com/agentclientprotocol/SimpleAgentTest.kt index 3674e7b..3bde652 100644 --- a/acp-ktor-test/src/commonTest/kotlin/com/agentclientprotocol/SimpleAgentTest.kt +++ b/acp-ktor-test/src/commonTest/kotlin/com/agentclientprotocol/SimpleAgentTest.kt @@ -2001,6 +2001,88 @@ abstract class SimpleAgentTest(protocolDriver: ProtocolDriver) : ProtocolDriver assertEquals(1, sessions.size) } + @OptIn(UnstableApi::class) + @Test + fun `providers capability and methods are wired through client api`() = testWithProtocols { clientProtocol, agentProtocol -> + var lastSetProvider: SetProvidersRequest? = null + var lastDisabledProviderId: String? = null + + val client = Client(protocol = clientProtocol) + Agent(protocol = agentProtocol, agentSupport = object : AgentSupport { + override suspend fun initialize(clientInfo: ClientInfo): AgentInfo { + return AgentInfo( + clientInfo.protocolVersion, + capabilities = AgentCapabilities(providers = ProvidersCapabilities()) + ) + } + + override suspend fun listProviders(_meta: JsonElement?): ListProvidersResponse { + return ListProvidersResponse( + providers = listOf( + ProviderInfo( + id = "main", + supported = listOf(LlmProtocol.OPENAI, LlmProtocol.ANTHROPIC), + required = false, + current = ProviderCurrentConfig( + apiType = LlmProtocol.OPENAI, + baseUrl = "https://api.openai.com/v1" + ) + ), + ProviderInfo( + id = "backup", + supported = listOf(LlmProtocol.OPENAI), + required = false + ) + ) + ) + } + + override suspend fun setProvider( + id: String, + apiType: LlmProtocol, + baseUrl: String, + headers: Map?, + _meta: JsonElement? + ): SetProvidersResponse { + lastSetProvider = SetProvidersRequest(id, apiType, baseUrl, headers, _meta) + return SetProvidersResponse() + } + + override suspend fun disableProvider(id: String, _meta: JsonElement?): DisableProvidersResponse { + lastDisabledProviderId = id + return DisableProvidersResponse() + } + + override suspend fun createSession(sessionParameters: SessionCreationParameters): AgentSession { + TODO("Not needed for providers test") + } + }) + + val agentInfo = client.initialize(ClientInfo(protocolVersion = LATEST_PROTOCOL_VERSION)) + assertNotNull(agentInfo.capabilities.providers) + + val providersResponse = client.listProviders() + assertEquals(2, providersResponse.providers.size) + assertEquals("main", providersResponse.providers[0].id) + assertEquals(LlmProtocol.OPENAI, providersResponse.providers[0].current?.apiType) + assertNull(providersResponse.providers[1].current) + + client.setProvider( + id = "main", + apiType = LlmProtocol.ANTHROPIC, + baseUrl = "https://api.anthropic.com", + headers = mapOf("x-api-key" to "test-key") + ) + assertNotNull(lastSetProvider) + assertEquals("main", lastSetProvider.id) + assertEquals(LlmProtocol.ANTHROPIC, lastSetProvider.apiType) + assertEquals("https://api.anthropic.com", lastSetProvider.baseUrl) + assertEquals("test-key", lastSetProvider.headers?.get("x-api-key")) + + client.disableProvider("main") + assertEquals("main", lastDisabledProviderId) + } + @Test @OptIn(UnstableApi::class) fun `session ready notifies available commands`() = testWithProtocols { clientProtocol, agentProtocol -> diff --git a/acp-model/.schema-checksums b/acp-model/.schema-checksums index 1a177c9..8f88c49 100644 --- a/acp-model/.schema-checksums +++ b/acp-model/.schema-checksums @@ -3,9 +3,9 @@ # Format: SHA256 FILENAME # Stable schemas -07f2cdfd7814496ebdab83fb7417787fa1dddc6276b11cd31b51be2f8ba95f2b schema/schema.json -f242b95def9a9cbfddd2db1a45d8d3d489ad1b4f564a1322547c90a94c647637 schema/meta.json +38751907a86016c73662ea2ad1ded2c8cbbdb99fe40b8368b6dd2794726be236 schema/schema.json +71036d4c70f1e964c445569c1878a513e2fadfc797161d7582224b4647669330 schema/meta.json # Unstable schemas -75d180b9c589cd7d79a5a9cbb6680d52e1bce71238839871441d30c753b497a9 schema/schema.unstable.json -e87ae9b3fc3b05f88da6dfc06d003e5263d6a041b1c934ed13b83173b39ed111 schema/meta.unstable.json +cb3cf31dae7e482dc45389f15e23edff037abaeccbffbe3b6d8eb1f9c00b88a5 schema/schema.unstable.json +0a030d3641d0cbc71c433fc2ef68e33ee3c5707220c3ceb662ccb2e6f656e026 schema/meta.unstable.json diff --git a/acp-model/.schema-revision b/acp-model/.schema-revision index ae6c846..e7ae50a 100644 --- a/acp-model/.schema-revision +++ b/acp-model/.schema-revision @@ -1 +1 @@ -37d12f4bb4b0cf1dca60421d48cb17decc119b8e +a26839cc3ab0a746eff1fb95a02e87a5946ad631 diff --git a/acp-model/SCHEMA_VERSION.md b/acp-model/SCHEMA_VERSION.md index 22ad1a9..a44b808 100644 --- a/acp-model/SCHEMA_VERSION.md +++ b/acp-model/SCHEMA_VERSION.md @@ -5,65 +5,63 @@ This file tracks the version of the Agent Client Protocol schema that the model ## Schema Source - Repository: https://github.com/agentclientprotocol/agent-client-protocol - Branch: main -- Release: v0.9.1 +- Baseline commit: `a26839cc3ab0a746eff1fb95a02e87a5946ad631` +- Baseline commit date: 2026-04-19 12:29:33 +0100 +- Baseline commit subject: `Optional current provider (#1021)` ## Schema Files ### Stable Schema - **schema.json** - - Commit: `37d12f4bb4b0cf1dca60421d48cb17decc119b8e` - - Date: 2025-12-20 18:25:51 +0000 - - SHA256: `07f2cdfd7814496ebdab83fb7417787fa1dddc6276b11cd31b51be2f8ba95f2b` + - Commit: `a26839cc3ab0a746eff1fb95a02e87a5946ad631` + - Date: 2026-04-19 12:29:33 +0100 + - SHA256: `38751907a86016c73662ea2ad1ded2c8cbbdb99fe40b8368b6dd2794726be236` - URL: https://github.com/agentclientprotocol/agent-client-protocol/blob/main/schema/schema.json - **meta.json** - - Commit: `37d12f4bb4b0cf1dca60421d48cb17decc119b8e` - - Date: 2025-12-20 18:25:51 +0000 - - SHA256: `f242b95def9a9cbfddd2db1a45d8d3d489ad1b4f564a1322547c90a94c647637` + - Commit: `a26839cc3ab0a746eff1fb95a02e87a5946ad631` + - Date: 2026-04-19 12:29:33 +0100 + - SHA256: `71036d4c70f1e964c445569c1878a513e2fadfc797161d7582224b4647669330` - URL: https://github.com/agentclientprotocol/agent-client-protocol/blob/main/schema/meta.json ### Unstable Schema - **schema.unstable.json** - - Commit: `37d12f4bb4b0cf1dca60421d48cb17decc119b8e` - - Date: 2025-12-20 18:25:51 +0000 - - SHA256: `75d180b9c589cd7d79a5a9cbb6680d52e1bce71238839871441d30c753b497a9` + - Commit: `a26839cc3ab0a746eff1fb95a02e87a5946ad631` + - Date: 2026-04-19 12:29:33 +0100 + - SHA256: `cb3cf31dae7e482dc45389f15e23edff037abaeccbffbe3b6d8eb1f9c00b88a5` - URL: https://github.com/agentclientprotocol/agent-client-protocol/blob/main/schema/schema.unstable.json - **meta.unstable.json** - - Commit: `37d12f4bb4b0cf1dca60421d48cb17decc119b8e` - - Date: 2025-12-20 18:25:51 +0000 - - SHA256: `e87ae9b3fc3b05f88da6dfc06d003e5263d6a041b1c934ed13b83173b39ed111` + - Commit: `a26839cc3ab0a746eff1fb95a02e87a5946ad631` + - Date: 2026-04-19 12:29:33 +0100 + - SHA256: `0a030d3641d0cbc71c433fc2ef68e33ee3c5707220c3ceb662ccb2e6f656e026` - URL: https://github.com/agentclientprotocol/agent-client-protocol/blob/main/schema/meta.unstable.json **Note:** All types from unstable schema must be marked with `@UnstableApi` annotation. ## Last Updated -- Date: 2025-12-20 +- Date: 2026-04-19 - Updated by: Manual schema synchronization ## Changes in This Version -- Added `session/fork` method to agent methods (unstable) -- Added `session/list` method to agent methods (unstable) -- Added `session/resume` method to agent methods (unstable) -- Added `session/set_config_option` method to agent methods (unstable) -- Added `session/set_model` method to agent methods (unstable) -- Added `$/cancel_request` protocol method (unstable) -- Updated stable schema with bug fixes and improvements +- `ProviderInfo.current` is optional now (`required` no longer includes `current`). +- Disabled provider is valid both when `current` is omitted and when it is explicitly `null`. +- Unstable providers schema (`providers/list`, `providers/set`, `providers/disable`) is synced to current `main` HEAD. ## Verification To verify the schema files match: ```bash # Stable schemas curl -s https://raw.githubusercontent.com/agentclientprotocol/agent-client-protocol/main/schema/schema.json | sha256sum -# Expected: 07f2cdfd7814496ebdab83fb7417787fa1dddc6276b11cd31b51be2f8ba95f2b +# Expected: 38751907a86016c73662ea2ad1ded2c8cbbdb99fe40b8368b6dd2794726be236 curl -s https://raw.githubusercontent.com/agentclientprotocol/agent-client-protocol/main/schema/meta.json | sha256sum -# Expected: f242b95def9a9cbfddd2db1a45d8d3d489ad1b4f564a1322547c90a94c647637 +# Expected: 71036d4c70f1e964c445569c1878a513e2fadfc797161d7582224b4647669330 # Unstable schemas curl -s https://raw.githubusercontent.com/agentclientprotocol/agent-client-protocol/main/schema/schema.unstable.json | sha256sum -# Expected: 75d180b9c589cd7d79a5a9cbb6680d52e1bce71238839871441d30c753b497a9 +# Expected: cb3cf31dae7e482dc45389f15e23edff037abaeccbffbe3b6d8eb1f9c00b88a5 curl -s https://raw.githubusercontent.com/agentclientprotocol/agent-client-protocol/main/schema/meta.unstable.json | sha256sum -# Expected: e87ae9b3fc3b05f88da6dfc06d003e5263d6a041b1c934ed13b83173b39ed111 +# Expected: 0a030d3641d0cbc71c433fc2ef68e33ee3c5707220c3ceb662ccb2e6f656e026 ``` diff --git a/acp-model/api/acp-model.api b/acp-model/api/acp-model.api index f245fc5..1aa53cc 100644 --- a/acp-model/api/acp-model.api +++ b/acp-model/api/acp-model.api @@ -127,6 +127,18 @@ public final class com/agentclientprotocol/model/AcpMethod$AgentMethods$NesSugge public static final field INSTANCE Lcom/agentclientprotocol/model/AcpMethod$AgentMethods$NesSuggest; } +public final class com/agentclientprotocol/model/AcpMethod$AgentMethods$ProvidersDisable : com/agentclientprotocol/model/AcpMethod$AcpRequestResponseMethod { + public static final field INSTANCE Lcom/agentclientprotocol/model/AcpMethod$AgentMethods$ProvidersDisable; +} + +public final class com/agentclientprotocol/model/AcpMethod$AgentMethods$ProvidersList : com/agentclientprotocol/model/AcpMethod$AcpRequestResponseMethod { + public static final field INSTANCE Lcom/agentclientprotocol/model/AcpMethod$AgentMethods$ProvidersList; +} + +public final class com/agentclientprotocol/model/AcpMethod$AgentMethods$ProvidersSet : com/agentclientprotocol/model/AcpMethod$AcpRequestResponseMethod { + public static final field INSTANCE Lcom/agentclientprotocol/model/AcpMethod$AgentMethods$ProvidersSet; +} + public final class com/agentclientprotocol/model/AcpMethod$AgentMethods$SessionCancel : com/agentclientprotocol/model/AcpMethod$AcpSessionNotificationMethod { public static final field INSTANCE Lcom/agentclientprotocol/model/AcpMethod$AgentMethods$SessionCancel; } @@ -291,8 +303,8 @@ public final class com/agentclientprotocol/model/AgentAuthCapabilities$Companion public final class com/agentclientprotocol/model/AgentCapabilities : com/agentclientprotocol/model/AcpCapabilities, com/agentclientprotocol/model/AcpWithMeta { public static final field Companion Lcom/agentclientprotocol/model/AgentCapabilities$Companion; public fun ()V - public fun (ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lcom/agentclientprotocol/model/NesCapabilities;Lcom/agentclientprotocol/model/PositionEncodingKind;Lkotlinx/serialization/json/JsonElement;)V - public synthetic fun (ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lcom/agentclientprotocol/model/NesCapabilities;Lcom/agentclientprotocol/model/PositionEncodingKind;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lcom/agentclientprotocol/model/NesCapabilities;Lcom/agentclientprotocol/model/PositionEncodingKind;Lcom/agentclientprotocol/model/ProvidersCapabilities;Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lcom/agentclientprotocol/model/NesCapabilities;Lcom/agentclientprotocol/model/PositionEncodingKind;Lcom/agentclientprotocol/model/ProvidersCapabilities;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Z public final fun component2 ()Lcom/agentclientprotocol/model/PromptCapabilities; public final fun component3 ()Lcom/agentclientprotocol/model/McpCapabilities; @@ -300,9 +312,10 @@ public final class com/agentclientprotocol/model/AgentCapabilities : com/agentcl public final fun component5 ()Lcom/agentclientprotocol/model/AgentAuthCapabilities; public final fun component6 ()Lcom/agentclientprotocol/model/NesCapabilities; public final fun component7 ()Lcom/agentclientprotocol/model/PositionEncodingKind; - public final fun component8 ()Lkotlinx/serialization/json/JsonElement; - public final fun copy (ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lcom/agentclientprotocol/model/NesCapabilities;Lcom/agentclientprotocol/model/PositionEncodingKind;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/AgentCapabilities; - public static synthetic fun copy$default (Lcom/agentclientprotocol/model/AgentCapabilities;ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lcom/agentclientprotocol/model/NesCapabilities;Lcom/agentclientprotocol/model/PositionEncodingKind;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/AgentCapabilities; + public final fun component8 ()Lcom/agentclientprotocol/model/ProvidersCapabilities; + public final fun component9 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lcom/agentclientprotocol/model/NesCapabilities;Lcom/agentclientprotocol/model/PositionEncodingKind;Lcom/agentclientprotocol/model/ProvidersCapabilities;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/AgentCapabilities; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/AgentCapabilities;ZLcom/agentclientprotocol/model/PromptCapabilities;Lcom/agentclientprotocol/model/McpCapabilities;Lcom/agentclientprotocol/model/SessionCapabilities;Lcom/agentclientprotocol/model/AgentAuthCapabilities;Lcom/agentclientprotocol/model/NesCapabilities;Lcom/agentclientprotocol/model/PositionEncodingKind;Lcom/agentclientprotocol/model/ProvidersCapabilities;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/AgentCapabilities; public fun equals (Ljava/lang/Object;)Z public final fun getAuth ()Lcom/agentclientprotocol/model/AgentAuthCapabilities; public final fun getLoadSession ()Z @@ -310,6 +323,7 @@ public final class com/agentclientprotocol/model/AgentCapabilities : com/agentcl public final fun getNes ()Lcom/agentclientprotocol/model/NesCapabilities; public final fun getPositionEncoding ()Lcom/agentclientprotocol/model/PositionEncodingKind; public final fun getPromptCapabilities ()Lcom/agentclientprotocol/model/PromptCapabilities; + public final fun getProviders ()Lcom/agentclientprotocol/model/ProvidersCapabilities; public final fun getSessionCapabilities ()Lcom/agentclientprotocol/model/SessionCapabilities; public fun get_meta ()Lkotlinx/serialization/json/JsonElement; public fun hashCode ()I @@ -1578,6 +1592,65 @@ public final class com/agentclientprotocol/model/DidSaveDocumentNotification$Com public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class com/agentclientprotocol/model/DisableProvidersRequest : com/agentclientprotocol/model/AcpRequest { + public static final field Companion Lcom/agentclientprotocol/model/DisableProvidersRequest$Companion; + public fun (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/DisableProvidersRequest; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/DisableProvidersRequest;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/DisableProvidersRequest; + public fun equals (Ljava/lang/Object;)Z + public final fun getId ()Ljava/lang/String; + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/DisableProvidersRequest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/DisableProvidersRequest$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/DisableProvidersRequest; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/DisableProvidersRequest;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/DisableProvidersRequest$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/DisableProvidersResponse : com/agentclientprotocol/model/AcpResponse { + public static final field Companion Lcom/agentclientprotocol/model/DisableProvidersResponse$Companion; + public fun ()V + public fun (Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/DisableProvidersResponse; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/DisableProvidersResponse;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/DisableProvidersResponse; + public fun equals (Ljava/lang/Object;)Z + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/DisableProvidersResponse$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/DisableProvidersResponse$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/DisableProvidersResponse; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/DisableProvidersResponse;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/DisableProvidersResponse$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public abstract class com/agentclientprotocol/model/ElicitationAction { public static final field Companion Lcom/agentclientprotocol/model/ElicitationAction$Companion; public synthetic fun (ILkotlinx/serialization/internal/SerializationConstructorMarker;)V @@ -2703,6 +2776,65 @@ public final class com/agentclientprotocol/model/KillTerminalCommandResponse$Com public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class com/agentclientprotocol/model/ListProvidersRequest : com/agentclientprotocol/model/AcpRequest { + public static final field Companion Lcom/agentclientprotocol/model/ListProvidersRequest$Companion; + public fun ()V + public fun (Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/ListProvidersRequest; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ListProvidersRequest;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ListProvidersRequest; + public fun equals (Ljava/lang/Object;)Z + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/ListProvidersRequest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ListProvidersRequest$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ListProvidersRequest; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/ListProvidersRequest;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ListProvidersRequest$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ListProvidersResponse : com/agentclientprotocol/model/AcpResponse { + public static final field Companion Lcom/agentclientprotocol/model/ListProvidersResponse$Companion; + public fun (Ljava/util/List;Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Ljava/util/List;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun component2 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Ljava/util/List;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/ListProvidersResponse; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ListProvidersResponse;Ljava/util/List;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ListProvidersResponse; + public fun equals (Ljava/lang/Object;)Z + public final fun getProviders ()Ljava/util/List; + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/ListProvidersResponse$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ListProvidersResponse$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ListProvidersResponse; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/ListProvidersResponse;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ListProvidersResponse$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/ListSessionsRequest : com/agentclientprotocol/model/AcpPaginatedRequest, com/agentclientprotocol/model/AcpRequest { public static final field Companion Lcom/agentclientprotocol/model/ListSessionsRequest$Companion; public fun ()V @@ -2771,6 +2903,41 @@ public final class com/agentclientprotocol/model/ListSessionsResponse$Companion public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class com/agentclientprotocol/model/LlmProtocol { + public static final field Companion Lcom/agentclientprotocol/model/LlmProtocol$Companion; + public static final synthetic fun box-impl (Ljava/lang/String;)Lcom/agentclientprotocol/model/LlmProtocol; + public static fun constructor-impl (Ljava/lang/String;)Ljava/lang/String; + public fun equals (Ljava/lang/Object;)Z + public static fun equals-impl (Ljava/lang/String;Ljava/lang/Object;)Z + public static final fun equals-impl0 (Ljava/lang/String;Ljava/lang/String;)Z + public final fun getValue ()Ljava/lang/String; + public fun hashCode ()I + public static fun hashCode-impl (Ljava/lang/String;)I + public fun toString ()Ljava/lang/String; + public static fun toString-impl (Ljava/lang/String;)Ljava/lang/String; + public final synthetic fun unbox-impl ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/LlmProtocol$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/LlmProtocol$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun deserialize-fG05qqA (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/String; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public final fun serialize-Nc_u59U (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/String;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/LlmProtocol$Companion { + public final fun getANTHROPIC-fCTSZ1M ()Ljava/lang/String; + public final fun getAZURE-fCTSZ1M ()Ljava/lang/String; + public final fun getBEDROCK-fCTSZ1M ()Ljava/lang/String; + public final fun getOPENAI-fCTSZ1M ()Ljava/lang/String; + public final fun getVERTEX-fCTSZ1M ()Ljava/lang/String; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/LoadSessionRequest : com/agentclientprotocol/model/AcpRequest, com/agentclientprotocol/model/AcpWithSessionId { public static final field Companion Lcom/agentclientprotocol/model/LoadSessionRequest$Companion; public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -4748,6 +4915,100 @@ public final class com/agentclientprotocol/model/PromptResponse$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class com/agentclientprotocol/model/ProviderCurrentConfig { + public static final field Companion Lcom/agentclientprotocol/model/ProviderCurrentConfig$Companion; + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1-fCTSZ1M ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun copy-559_-P8 (Ljava/lang/String;Ljava/lang/String;)Lcom/agentclientprotocol/model/ProviderCurrentConfig; + public static synthetic fun copy-559_-P8$default (Lcom/agentclientprotocol/model/ProviderCurrentConfig;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ProviderCurrentConfig; + public fun equals (Ljava/lang/Object;)Z + public final fun getApiType-fCTSZ1M ()Ljava/lang/String; + public final fun getBaseUrl ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/ProviderCurrentConfig$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ProviderCurrentConfig$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ProviderCurrentConfig; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/ProviderCurrentConfig;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ProviderCurrentConfig$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ProviderInfo : com/agentclientprotocol/model/AcpWithMeta { + public static final field Companion Lcom/agentclientprotocol/model/ProviderInfo$Companion; + public fun (Ljava/lang/String;Ljava/util/List;ZLcom/agentclientprotocol/model/ProviderCurrentConfig;Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Ljava/lang/String;Ljava/util/List;ZLcom/agentclientprotocol/model/ProviderCurrentConfig;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/util/List; + public final fun component3 ()Z + public final fun component4 ()Lcom/agentclientprotocol/model/ProviderCurrentConfig; + public final fun component5 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Ljava/lang/String;Ljava/util/List;ZLcom/agentclientprotocol/model/ProviderCurrentConfig;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/ProviderInfo; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ProviderInfo;Ljava/lang/String;Ljava/util/List;ZLcom/agentclientprotocol/model/ProviderCurrentConfig;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ProviderInfo; + public fun equals (Ljava/lang/Object;)Z + public final fun getCurrent ()Lcom/agentclientprotocol/model/ProviderCurrentConfig; + public final fun getId ()Ljava/lang/String; + public final fun getRequired ()Z + public final fun getSupported ()Ljava/util/List; + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/ProviderInfo$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ProviderInfo$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ProviderInfo; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/ProviderInfo;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ProviderInfo$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ProvidersCapabilities : com/agentclientprotocol/model/AcpWithMeta { + public static final field Companion Lcom/agentclientprotocol/model/ProvidersCapabilities$Companion; + public fun ()V + public fun (Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/ProvidersCapabilities; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/ProvidersCapabilities;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/ProvidersCapabilities; + public fun equals (Ljava/lang/Object;)Z + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/ProvidersCapabilities$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/ProvidersCapabilities$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/ProvidersCapabilities; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/ProvidersCapabilities;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/ProvidersCapabilities$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/ReadTextFileRequest : com/agentclientprotocol/model/AcpRequest, com/agentclientprotocol/model/AcpWithSessionId { public static final field Companion Lcom/agentclientprotocol/model/ReadTextFileRequest$Companion; public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lkotlin/UInt;Lkotlin/UInt;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -6306,6 +6567,71 @@ public final class com/agentclientprotocol/model/SessionUpdate$UserMessageChunk$ public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class com/agentclientprotocol/model/SetProvidersRequest : com/agentclientprotocol/model/AcpRequest { + public static final field Companion Lcom/agentclientprotocol/model/SetProvidersRequest$Companion; + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/json/JsonElement;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2-fCTSZ1M ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/util/Map; + public final fun component5 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy-AwPM1f0 (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/SetProvidersRequest; + public static synthetic fun copy-AwPM1f0$default (Lcom/agentclientprotocol/model/SetProvidersRequest;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/SetProvidersRequest; + public fun equals (Ljava/lang/Object;)Z + public final fun getApiType-fCTSZ1M ()Ljava/lang/String; + public final fun getBaseUrl ()Ljava/lang/String; + public final fun getHeaders ()Ljava/util/Map; + public final fun getId ()Ljava/lang/String; + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/SetProvidersRequest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/SetProvidersRequest$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/SetProvidersRequest; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/SetProvidersRequest;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/SetProvidersRequest$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/SetProvidersResponse : com/agentclientprotocol/model/AcpResponse { + public static final field Companion Lcom/agentclientprotocol/model/SetProvidersResponse$Companion; + public fun ()V + public fun (Lkotlinx/serialization/json/JsonElement;)V + public synthetic fun (Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lkotlinx/serialization/json/JsonElement; + public final fun copy (Lkotlinx/serialization/json/JsonElement;)Lcom/agentclientprotocol/model/SetProvidersResponse; + public static synthetic fun copy$default (Lcom/agentclientprotocol/model/SetProvidersResponse;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lcom/agentclientprotocol/model/SetProvidersResponse; + public fun equals (Ljava/lang/Object;)Z + public fun get_meta ()Lkotlinx/serialization/json/JsonElement; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class com/agentclientprotocol/model/SetProvidersResponse$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Lcom/agentclientprotocol/model/SetProvidersResponse$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lcom/agentclientprotocol/model/SetProvidersResponse; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lcom/agentclientprotocol/model/SetProvidersResponse;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class com/agentclientprotocol/model/SetProvidersResponse$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class com/agentclientprotocol/model/SetSessionConfigOptionRequest : com/agentclientprotocol/model/AcpRequest, com/agentclientprotocol/model/AcpWithSessionId { public static final field Companion Lcom/agentclientprotocol/model/SetSessionConfigOptionRequest$Companion; public synthetic fun (Ljava/lang/String;Ljava/lang/String;Lcom/agentclientprotocol/model/SessionConfigOptionValue;Lkotlinx/serialization/json/JsonElement;ILkotlin/jvm/internal/DefaultConstructorMarker;)V diff --git a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Capabilities.kt b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Capabilities.kt index 7042ba1..952eba2 100644 --- a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Capabilities.kt +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Capabilities.kt @@ -203,6 +203,21 @@ public data class AgentAuthCapabilities( override val _meta: JsonElement? = null ) : AcpWithMeta +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Provider configuration capabilities supported by the agent. + * + * By supplying `{}` it means that the agent supports provider configuration methods. + */ +@UnstableApi +@Serializable +public data class ProvidersCapabilities( + override val _meta: JsonElement? = null +) : AcpWithMeta + /** * Capabilities supported by the agent. * @@ -224,5 +239,7 @@ public data class AgentCapabilities( val nes: NesCapabilities? = null, @property:UnstableApi val positionEncoding: PositionEncodingKind? = null, + @property:UnstableApi + val providers: ProvidersCapabilities? = null, override val _meta: JsonElement? = null -) : AcpCapabilities, AcpWithMeta \ No newline at end of file +) : AcpCapabilities, AcpWithMeta diff --git a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Methods.kt b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Methods.kt index f43dc08..3deb2b6 100644 --- a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Methods.kt +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Methods.kt @@ -46,6 +46,12 @@ public open class AcpMethod(public val methodName: MethodName) { public object Authenticate : AcpRequestResponseMethod("authenticate", AuthenticateRequest.serializer(), AuthenticateResponse.serializer()) @UnstableApi public object Logout : AcpRequestResponseMethod("logout", LogoutRequest.serializer(), LogoutResponse.serializer()) + @UnstableApi + public object ProvidersList : AcpRequestResponseMethod("providers/list", ListProvidersRequest.serializer(), ListProvidersResponse.serializer()) + @UnstableApi + public object ProvidersSet : AcpRequestResponseMethod("providers/set", SetProvidersRequest.serializer(), SetProvidersResponse.serializer()) + @UnstableApi + public object ProvidersDisable : AcpRequestResponseMethod("providers/disable", DisableProvidersRequest.serializer(), DisableProvidersResponse.serializer()) public object SessionNew : AcpRequestResponseMethod("session/new", NewSessionRequest.serializer(), NewSessionResponse.serializer()) public object SessionLoad : AcpRequestResponseMethod("session/load", LoadSessionRequest.serializer(), LoadSessionResponse.serializer()) diff --git a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Requests.kt b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Requests.kt index 0ac0eaa..69ceb16 100644 --- a/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Requests.kt +++ b/acp-model/src/commonMain/kotlin/com/agentclientprotocol/model/Requests.kt @@ -26,6 +26,7 @@ import kotlinx.serialization.json.contentOrNull import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.jsonPrimitive import kotlinx.serialization.json.put +import kotlin.jvm.JvmInline /** * Type discriminator key for AuthMethod serialization. @@ -498,6 +499,50 @@ public data class SetSessionModelRequest( override val _meta: JsonElement? = null ) : AcpRequest, AcpWithSessionId +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Request parameters for `providers/list`. + */ +@UnstableApi +@Serializable +public data class ListProvidersRequest( + override val _meta: JsonElement? = null +) : AcpRequest + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Request parameters for `providers/set`. + */ +@UnstableApi +@Serializable +public data class SetProvidersRequest( + val id: String, + val apiType: LlmProtocol, + val baseUrl: String, + val headers: Map? = null, + override val _meta: JsonElement? = null +) : AcpRequest + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Request parameters for `providers/disable`. + */ +@UnstableApi +@Serializable +public data class DisableProvidersRequest( + val id: String, + override val _meta: JsonElement? = null +) : AcpRequest + // === Response Types === /** @@ -570,6 +615,61 @@ public data class SessionModelState( override val _meta: JsonElement? = null ) : AcpWithMeta +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Well-known API protocol identifiers for LLM providers. + * + * Agents and clients MUST handle unknown protocol identifiers gracefully. + */ +@UnstableApi +@JvmInline +@Serializable +public value class LlmProtocol(public val value: String) { + override fun toString(): String = value + + public companion object { + public val ANTHROPIC: LlmProtocol = LlmProtocol("anthropic") + public val OPENAI: LlmProtocol = LlmProtocol("openai") + public val AZURE: LlmProtocol = LlmProtocol("azure") + public val VERTEX: LlmProtocol = LlmProtocol("vertex") + public val BEDROCK: LlmProtocol = LlmProtocol("bedrock") + } +} + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Current effective non-secret routing configuration for a provider. + */ +@UnstableApi +@Serializable +public data class ProviderCurrentConfig( + val apiType: LlmProtocol, + val baseUrl: String +) + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Information about a configurable LLM provider. + */ +@UnstableApi +@Serializable +public data class ProviderInfo( + val id: String, + val supported: List, + val required: Boolean, + val current: ProviderCurrentConfig? = null, + override val _meta: JsonElement? = null +) : AcpWithMeta + /** * Response from creating a new session. * @@ -690,6 +790,46 @@ public data class SetSessionModelResponse( override val _meta: JsonElement? = null ) : AcpResponse +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Response to `providers/list`. + */ +@UnstableApi +@Serializable +public data class ListProvidersResponse( + val providers: List, + override val _meta: JsonElement? = null +) : AcpResponse + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Response to `providers/set`. + */ +@UnstableApi +@Serializable +public data class SetProvidersResponse( + override val _meta: JsonElement? = null +) : AcpResponse + +/** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Response to `providers/disable`. + */ +@UnstableApi +@Serializable +public data class DisableProvidersResponse( + override val _meta: JsonElement? = null +) : AcpResponse + /** * Response to `fs/write_text_file` */ diff --git a/acp-model/src/commonTest/kotlin/com/agentclientprotocol/model/ProvidersSerializationTest.kt b/acp-model/src/commonTest/kotlin/com/agentclientprotocol/model/ProvidersSerializationTest.kt new file mode 100644 index 0000000..173edbb --- /dev/null +++ b/acp-model/src/commonTest/kotlin/com/agentclientprotocol/model/ProvidersSerializationTest.kt @@ -0,0 +1,140 @@ +package com.agentclientprotocol.model + +import com.agentclientprotocol.annotations.UnstableApi +import com.agentclientprotocol.rpc.ACPJson +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNotNull +import kotlin.test.assertNull +import kotlin.test.assertTrue + +@OptIn(UnstableApi::class) +class ProvidersSerializationTest { + + @Test + fun `LlmProtocol known values serialize and deserialize correctly`() { + val knownProtocols = listOf( + LlmProtocol.ANTHROPIC, + LlmProtocol.OPENAI, + LlmProtocol.AZURE, + LlmProtocol.VERTEX, + LlmProtocol.BEDROCK + ) + + for (protocol in knownProtocols) { + val encoded = ACPJson.encodeToString(LlmProtocol.serializer(), protocol) + assertEquals("\"${protocol.value}\"", encoded) + + val decoded = ACPJson.decodeFromString(LlmProtocol.serializer(), encoded) + assertEquals(protocol, decoded) + } + } + + @Test + fun `unknown LlmProtocol value round-trips`() { + val unknown = LlmProtocol("_custom") + + val encoded = ACPJson.encodeToString(LlmProtocol.serializer(), unknown) + val decoded = ACPJson.decodeFromString(LlmProtocol.serializer(), encoded) + + assertEquals("\"_custom\"", encoded) + assertEquals(unknown, decoded) + } + + @Test + fun `ProviderInfo with enabled current config round-trips`() { + val info = ProviderInfo( + id = "main", + supported = listOf(LlmProtocol.OPENAI, LlmProtocol.ANTHROPIC), + required = false, + current = ProviderCurrentConfig( + apiType = LlmProtocol.OPENAI, + baseUrl = "https://api.openai.com/v1" + ) + ) + + val encoded = ACPJson.encodeToString(ProviderInfo.serializer(), info) + val decoded = ACPJson.decodeFromString(ProviderInfo.serializer(), encoded) + + assertEquals(info, decoded) + } + + @Test + fun `ProviderInfo with omitted current round-trips as disabled`() { + val info = ProviderInfo( + id = "main", + supported = listOf(LlmProtocol.OPENAI), + required = false + ) + + val encoded = ACPJson.encodeToString(ProviderInfo.serializer(), info) + val decoded = ACPJson.decodeFromString(ProviderInfo.serializer(), encoded) + + assertFalse(encoded.contains("\"current\"")) + assertNull(decoded.current) + assertEquals(info, decoded) + } + + @Test + fun `incoming JSON with current null is accepted and mapped to disabled`() { + val payload = """ + { + "id": "main", + "supported": ["openai"], + "required": false, + "current": null + } + """.trimIndent() + + val decoded = ACPJson.decodeFromString(ProviderInfo.serializer(), payload) + val encoded = ACPJson.encodeToString(ProviderInfo.serializer(), decoded) + + assertEquals("main", decoded.id) + assertNull(decoded.current) + assertFalse(encoded.contains("\"current\"")) + } + + @Test + fun `SetProvidersRequest handles optional headers correctly`() { + val withoutHeaders = SetProvidersRequest( + id = "main", + apiType = LlmProtocol.OPENAI, + baseUrl = "https://api.openai.com/v1" + ) + val withoutHeadersJson = ACPJson.encodeToString(SetProvidersRequest.serializer(), withoutHeaders) + val withoutHeadersDecoded = ACPJson.decodeFromString(SetProvidersRequest.serializer(), withoutHeadersJson) + + assertFalse(withoutHeadersJson.contains("\"headers\"")) + assertNull(withoutHeadersDecoded.headers) + + val withHeaders = SetProvidersRequest( + id = "main", + apiType = LlmProtocol.OPENAI, + baseUrl = "https://api.openai.com/v1", + headers = mapOf("Authorization" to "Bearer token") + ) + val withHeadersJson = ACPJson.encodeToString(SetProvidersRequest.serializer(), withHeaders) + val withHeadersDecoded = ACPJson.decodeFromString(SetProvidersRequest.serializer(), withHeadersJson) + + assertTrue(withHeadersJson.contains("\"headers\"")) + assertEquals(withHeaders, withHeadersDecoded) + } + + @Test + fun `AgentCapabilities providers empty object round-trips`() { + val payload = """ + { + "providers": {} + } + """.trimIndent() + + val decoded = ACPJson.decodeFromString(AgentCapabilities.serializer(), payload) + val encoded = ACPJson.encodeToString(AgentCapabilities.serializer(), decoded) + val roundTripped = ACPJson.decodeFromString(AgentCapabilities.serializer(), encoded) + + assertNotNull(decoded.providers) + assertNotNull(roundTripped.providers) + assertEquals(decoded.providers, roundTripped.providers) + } +} diff --git a/acp/api/acp.api b/acp/api/acp.api index 82cd98e..3e85ba2 100644 --- a/acp/api/acp.api +++ b/acp/api/acp.api @@ -89,9 +89,13 @@ public abstract interface class com/agentclientprotocol/agent/AgentSupport { public fun createNesSession (Lcom/agentclientprotocol/model/StartNesRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun createNesSession$suspendImpl (Lcom/agentclientprotocol/agent/AgentSupport;Lcom/agentclientprotocol/model/StartNesRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun createSession (Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun disableProvider (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun disableProvider$suspendImpl (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun forkSession-nk3TnMc (Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun forkSession-nk3TnMc$suspendImpl (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public abstract fun initialize (Lcom/agentclientprotocol/client/ClientInfo;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun listProviders (Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun listProviders$suspendImpl (Lcom/agentclientprotocol/agent/AgentSupport;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun listSessions (Ljava/lang/String;Ljava/util/List;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun listSessions$suspendImpl (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Ljava/util/List;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun loadSession-nk3TnMc (Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -100,16 +104,21 @@ public abstract interface class com/agentclientprotocol/agent/AgentSupport { public static synthetic fun logout$suspendImpl (Lcom/agentclientprotocol/agent/AgentSupport;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun resumeSession-nk3TnMc (Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun resumeSession-nk3TnMc$suspendImpl (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public fun setProvider-PcC0lbA (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun setProvider-PcC0lbA$suspendImpl (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } public final class com/agentclientprotocol/agent/AgentSupport$DefaultImpls { public static fun authenticate-fMnwWJU (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun createNesSession (Lcom/agentclientprotocol/agent/AgentSupport;Lcom/agentclientprotocol/model/StartNesRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun disableProvider (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun forkSession-nk3TnMc (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun listProviders (Lcom/agentclientprotocol/agent/AgentSupport;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun listSessions (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Ljava/util/List;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun loadSession-nk3TnMc (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun logout (Lcom/agentclientprotocol/agent/AgentSupport;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static fun resumeSession-nk3TnMc (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun setProvider-PcC0lbA (Lcom/agentclientprotocol/agent/AgentSupport;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } public abstract interface class com/agentclientprotocol/agent/NesAgentSession { @@ -155,6 +164,8 @@ public final class com/agentclientprotocol/client/Client { public synthetic fun (Lcom/agentclientprotocol/protocol/Protocol;Lcom/agentclientprotocol/client/GlobalElicitationHandler;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun authenticate-fMnwWJU (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun authenticate-fMnwWJU$default (Lcom/agentclientprotocol/client/Client;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public final fun disableProvider (Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun disableProvider$default (Lcom/agentclientprotocol/client/Client;Ljava/lang/String;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public final fun forkSession-wPMwmcM (Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lcom/agentclientprotocol/client/ClientOperationsFactory;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun getAgentInfo ()Lcom/agentclientprotocol/agent/AgentInfo; public final fun getClientInfo ()Lcom/agentclientprotocol/client/ClientInfo; @@ -164,6 +175,8 @@ public final class com/agentclientprotocol/client/Client { public final fun getSession-0izbxq0 (Ljava/lang/String;)Lcom/agentclientprotocol/client/ClientSession; public final fun initialize (Lcom/agentclientprotocol/client/ClientInfo;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun initialize$default (Lcom/agentclientprotocol/client/Client;Lcom/agentclientprotocol/client/ClientInfo;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public final fun listProviders (Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun listProviders$default (Lcom/agentclientprotocol/client/Client;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public final fun listSessions (Ljava/lang/String;Ljava/util/List;Lkotlinx/serialization/json/JsonElement;)Lkotlinx/coroutines/flow/Flow; public static synthetic fun listSessions$default (Lcom/agentclientprotocol/client/Client;Ljava/lang/String;Ljava/util/List;Lkotlinx/serialization/json/JsonElement;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; public final fun loadSession-wPMwmcM (Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lcom/agentclientprotocol/client/ClientOperationsFactory;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -171,6 +184,8 @@ public final class com/agentclientprotocol/client/Client { public static synthetic fun logout$default (Lcom/agentclientprotocol/client/Client;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public final fun newSession (Lcom/agentclientprotocol/common/SessionCreationParameters;Lcom/agentclientprotocol/client/ClientOperationsFactory;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun resumeSession-wPMwmcM (Ljava/lang/String;Lcom/agentclientprotocol/common/SessionCreationParameters;Lcom/agentclientprotocol/client/ClientOperationsFactory;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun setProvider-PcC0lbA (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun setProvider-PcC0lbA$default (Lcom/agentclientprotocol/client/Client;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; public final fun startNesSession (Ljava/lang/String;Ljava/util/List;Lcom/agentclientprotocol/model/NesRepository;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public static synthetic fun startNesSession$default (Lcom/agentclientprotocol/client/Client;Ljava/lang/String;Ljava/util/List;Lcom/agentclientprotocol/model/NesRepository;Lkotlinx/serialization/json/JsonElement;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; } diff --git a/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/Agent.kt b/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/Agent.kt index ec9744f..a700673 100644 --- a/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/Agent.kt +++ b/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/Agent.kt @@ -153,6 +153,21 @@ public class Agent( return@setRequestHandler agentSupport.logout(params._meta) } + @OptIn(UnstableApi::class) + protocol.setRequestHandler(AcpMethod.AgentMethods.ProvidersList) { params: ListProvidersRequest -> + return@setRequestHandler agentSupport.listProviders(params._meta) + } + + @OptIn(UnstableApi::class) + protocol.setRequestHandler(AcpMethod.AgentMethods.ProvidersSet) { params: SetProvidersRequest -> + return@setRequestHandler agentSupport.setProvider(params.id, params.apiType, params.baseUrl, params.headers, params._meta) + } + + @OptIn(UnstableApi::class) + protocol.setRequestHandler(AcpMethod.AgentMethods.ProvidersDisable) { params: DisableProvidersRequest -> + return@setRequestHandler agentSupport.disableProvider(params.id, params._meta) + } + protocol.setPaginatedRequestHandler( AcpMethod.AgentMethods.SessionList, // TODO: move to some global agent/client settings diff --git a/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/AgentSupport.kt b/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/AgentSupport.kt index 0c99ce6..6c67da9 100644 --- a/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/AgentSupport.kt +++ b/acp/src/commonMain/kotlin/com/agentclientprotocol/agent/AgentSupport.kt @@ -5,9 +5,13 @@ import com.agentclientprotocol.client.ClientInfo import com.agentclientprotocol.common.SessionCreationParameters import com.agentclientprotocol.model.AuthMethodId import com.agentclientprotocol.model.AuthenticateResponse +import com.agentclientprotocol.model.DisableProvidersResponse +import com.agentclientprotocol.model.ListProvidersResponse +import com.agentclientprotocol.model.LlmProtocol import com.agentclientprotocol.model.LogoutResponse import com.agentclientprotocol.model.SessionId import com.agentclientprotocol.model.SessionInfo +import com.agentclientprotocol.model.SetProvidersResponse import com.agentclientprotocol.model.StartNesRequest import kotlinx.serialization.json.JsonElement @@ -49,6 +53,62 @@ public interface AgentSupport { throw NotImplementedError("logout is not implemented. The capability is declared in AgentCapabilities.auth.logout") } + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Lists providers that can be configured by the client. + * + * @param _meta optional metadata + * @return a [ListProvidersResponse] with configurable providers and current routing info + */ + @UnstableApi + public suspend fun listProviders(_meta: JsonElement?): ListProvidersResponse { + throw NotImplementedError("listProviders is not implemented. The capability is declared in AgentCapabilities.providers") + } + + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Replaces the full configuration for one provider id. + * + * @param id provider id to configure + * @param apiType protocol type for this provider + * @param baseUrl base URL for requests sent through this provider + * @param headers optional headers map for this provider + * @param _meta optional metadata + * @return a [SetProvidersResponse] indicating the update result + */ + @UnstableApi + public suspend fun setProvider( + id: String, + apiType: LlmProtocol, + baseUrl: String, + headers: Map?, + _meta: JsonElement? + ): SetProvidersResponse { + throw NotImplementedError("setProvider is not implemented. The capability is declared in AgentCapabilities.providers") + } + + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Disables a provider. + * + * @param id provider id to disable + * @param _meta optional metadata + * @return a [DisableProvidersResponse] indicating the disable result + */ + @UnstableApi + public suspend fun disableProvider(id: String, _meta: JsonElement?): DisableProvidersResponse { + throw NotImplementedError("disableProvider is not implemented. The capability is declared in AgentCapabilities.providers") + } + /** * **UNSTABLE** * @@ -134,4 +194,4 @@ public interface AgentSupport { public suspend fun createNesSession(request: StartNesRequest): NesAgentSession { throw NotImplementedError("createNesSession is not implemented. The capability is declared in AgentCapabilities.nes") } -} \ No newline at end of file +} diff --git a/acp/src/commonMain/kotlin/com/agentclientprotocol/client/Client.kt b/acp/src/commonMain/kotlin/com/agentclientprotocol/client/Client.kt index 321557a..b458a5c 100644 --- a/acp/src/commonMain/kotlin/com/agentclientprotocol/client/Client.kt +++ b/acp/src/commonMain/kotlin/com/agentclientprotocol/client/Client.kt @@ -313,6 +313,57 @@ public class Client( return AcpMethod.AgentMethods.Logout(protocol, LogoutRequest(_meta)) } + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Lists providers that can be configured by the client. + */ + @UnstableApi + public suspend fun listProviders(_meta: JsonElement? = null): ListProvidersResponse { + return AcpMethod.AgentMethods.ProvidersList(protocol, ListProvidersRequest(_meta)) + } + + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Replaces the full configuration for one provider id. + * + * @param id provider id to configure + * @param apiType protocol type for this provider + * @param baseUrl base URL for requests sent through this provider + * @param headers optional headers map for this provider + * @param _meta optional metadata + */ + @UnstableApi + public suspend fun setProvider( + id: String, + apiType: LlmProtocol, + baseUrl: String, + headers: Map? = null, + _meta: JsonElement? = null + ): SetProvidersResponse { + return AcpMethod.AgentMethods.ProvidersSet(protocol, SetProvidersRequest(id, apiType, baseUrl, headers, _meta)) + } + + /** + * **UNSTABLE** + * + * This capability is not part of the spec yet, and may be removed or changed at any point. + * + * Disables a provider by id. + * + * @param id provider id to disable + * @param _meta optional metadata + */ + @UnstableApi + public suspend fun disableProvider(id: String, _meta: JsonElement? = null): DisableProvidersResponse { + return AcpMethod.AgentMethods.ProvidersDisable(protocol, DisableProvidersRequest(id, _meta)) + } + /** * Creates a new session with specified [sessionParameters]. * From 16aa0f9f2b5bd36df12b93a28d9f36185f0e4850 Mon Sep 17 00:00:00 2001 From: Evgeniy Stepanov Date: Tue, 21 Apr 2026 11:10:51 +0300 Subject: [PATCH 2/2] Increment sdk version --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 8bc029c..3ebc98e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { private val buildNumber: String? = System.getenv("GITHUB_RUN_NUMBER") private val isReleasePublication = System.getenv("RELEASE_PUBLICATION")?.toBoolean() ?: false -private val baseVersion = "0.19.0" +private val baseVersion = "0.20.0" allprojects { group = "com.agentclientprotocol"